チャレンジ:プライベートアクセストークン
2022年6月9日
プライベートアクセストークンは、HTTPリクエストが正当なデバイスから来たものであることを、個人を特定することなく証明できる強力なツールです。この証明により、CAPTCHAを表示する頻度を減らすことができます。設定もテストもシンプルですから、本課題では、プライベートアクセストークンをご自身のサーバでお試しになるようお勧めしております。
始める前に、「Replace CAPTCHAs with Private Access Tokens」を必ずご覧になり、この機能の概要をご確認ください
CAPTCHAのプライベートアクセストークンへの置き換え
Watch now課題を始める
サーバにプライベートアクセストークンのサポートを追加するのは簡単です。サーバ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で共有することもお忘れなく。