チャレンジ:プライベートアクセストークン

プライベートアクセストークンは、HTTPリクエストが正当なデバイスから来たものであることを、個人を特定することなく証明できる強力なツールです。この証明により、CAPTCHAを表示する頻度を減らすことができます。設定もテストもシンプルですから、本課題では、プライベートアクセストークンをご自身のサーバでお試しになるようお勧めしております。

始める前に、「Replace CAPTCHAs with Private Access Tokens」を必ずご覧になり、この機能の概要をご確認ください

  • WWDC22

CAPTCHAのプライベートアクセストークンへの置き換え

...

課題を始める

サーバにプライベートアクセストークンのサポートを追加するのは簡単です。サーバrは、HTTP認証チャレンジを送信して、あなたが信頼するトークン発行者の署名が入ったトークンの提示をクライアントに要求することができます。そして、その発行者の公開鍵を用いてトークンの検証を行うことができます

トークン発行者を選択する プライベートアクセストークンを採用するには、まずトークン発行者を選択する必要があります。サーバは、クライアントに送信するチャレンジに、トークン発行者のホスト名と公開鍵を含める必要があります。iOS 16とmacOS Venturaを使用する場合、CloudflareとFastlyのトークン発行者でテストすることができます。各発行者について、URLフォーマットhttps://<issuer name>/.well-known/token-issuer-directoryで公開鍵を調べることができます。以下のURLのいずれかをサーバから取得して、発行者情報を取得することができます。

Cloudflare — https://demo-pat.issuer.cloudflare.com/.well-known/token-issuer-directory

Fastly — https://demo-issuer.private-access-tokens.fastly.com/.well-known/token-issuer-directory

Learn more about Private Access Tokens and Cloudflare

Learn more about Private Access Tokens and Fastly

トークンチャレンジと回収 チャレンジを送信するには、「PrivateToken」チャレンジを含む「WWW-Authenticate」ヘッダでクライアントが行うリクエストに対して、サーバがHTTP401レスポンスをポストする必要があります。このヘッダは、base64urlエンコーディングにTokenChallenge構造を含む「challenge」と、base64urlエンコーディングによるトークン発行者の公開鍵を含む「token-key」という2つの属性を含んでいます。

WWW-Authenticate: PrivateToken challenge=, token-key=

TokenChallenge構造は、トークンのタイプ、発行者のホスト名、チャレンジにバインドするためのオプションのコンテキスト、サーバのホスト名を含みます。iOS16とmacOS Venturaはトークンタイプ2をサポートしており、それは公的に検証可能なRSAブラインド署名を使用しています。

struct {
    uint16_t token_type;               // 0x0002, in network-byte order
    uint16_t issuer_name_length;       // Issuer name length, in network-byte order
    char issuer_name[];                // Hostname of the token issuer
    uint8_t redemption_context_length; // Redemption context length (0 or 32)
    uint8_t redemption_context[];      // Redemption context, either 0 or 32 bytes
    uint16_t origin_info_length;       // Origin info length, in network-byte order
    char origin_info[];                // Hostname of your server
} TokenChallenge; 

トークンによる応答は、「Authorization 」ヘッダに来ます。「token」属性を含みますが、これはbase64urlエンコーディングによるRSAブラインド署名トークンです。このトークンの検証には、トークン発行者の公開鍵を使用します。

Authorization: PrivateToken token=

注:トークンチャレンジを送信するときは、メインページのロードをブロックしないようにしてください。トークンをサポートしていないクライアントが、まだみなさんのWebサイトにアクセスできることを確認してください。

Adopt the "PrivateToken" HTTP authentication scheme

Issuance Protocol for Publicly Verifiable Tokens

プライベートアクセストークンの設定方法がわかったところで、ご自身のWebサイトでトークンチャレンジを送信する方法を検討してみましょう。プライベートアクセストークンをサポートしているクライアントとサポートしていないクライアントであなたのサイトをテストして、プライベートアクセストークンをサポートしていないクライアントに対してのみCAPTCHAを表示させる方法を見つけてください。

この機能の採用するにあたっての質問がありますか?木曜日の朝にプライベートアクセストークンに関するQ&Aをご確認ください。また、CAPTCHAなしのエクスペリエンスをハッシュタグ「#WWDC22Challenges」 をつけてTwitterで共有することもお忘れなく。

Explore #WWDC22Challenges on social media

Read the WWDC22 Challenges Terms and Conditions