챌린지: 프라이빗 액세스 토큰
2022년 06월 09일
프라이빗 액세스 토큰은 신원을 공개하지 않고도 정상적인 기기에서 보낸 HTTP 요청인지 확인하는 데 효과적인 도구입니다. 이런 증명이 있으면 CAPTCHA를 사용자에게 보여주는 횟수를 줄일 수 있습니다. 설정과 테스트도 간단합니다. 오늘 목요일에는 서버에서 프라이빗 액세스 토큰을 사용해 보세요.
시작하기에 앞서 ‘CAPTCHA를 프라이빗 액세스 토큰으로 대체하기’에서 기능을 간단히 살펴보세요.
CAPTCHA를 프라이빗 액세스 토큰으로 대체하기
Watch now챌린지 시작하기
서버에 쉽게 프라이빗 액세스 토큰에 대한 지원을 추가할 수 있습니다. 서버에서는 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” 헤더를 달아서 HTTP 401 응답을 게시해야 합니다. 이 헤더에는 두 개의 속성이 있습니다. “challenge”에는 base64url 인코딩 형식의 TokenChallenge 구조가 포함되고, “token-key”에는 base64url 인코딩을 사용하는 토큰 발급 기관의 공개 키가 포함됩니다.
WWW-Authenticate: PrivateToken challenge=, token-key=
TokenChallenge 구조에는 토큰 유형, 발급 기관의 호스트 이름, 시도에 바인딩할 선택적 컨텍스트, 서버의 호스트 이름, iOS 16 및 macOS Ventura 지원 토큰 타입 2(공개적으로 인증 가능한 RSA Blind Signature 사용)가 포함됩니다.
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 Blind Signature 토큰입니다. 토큰 발급 기관의 공개 키를 사용하여 이 토큰을 인증하세요.
Authorization: PrivateToken token=
참고: 토큰 시도를 보낼 때는 메인 페이지 로드를 차단하지 마세요. 토큰을 지원하지 않는 클라이언트도 웹사이트에 액세스할 수 있도록 하시기 바랍니다.
Adopt the "PrivateToken" HTTP authentication scheme
Issuance Protocol for Publicly Verifiable Tokens
프라이빗 액세스 토큰을 설정하는 방법을 아셨으므로, 나만의 웹사이트에서 토큰 시도를 전송하는 방법을 알아보세요. 프라이빗 액세스 토큰을 지원하는 클라이언트와 그렇지 않은 클라이언트로 사이트를 테스트해 보세요. 또한 프라이빗 액세스 토큰을 지원하지 않는 클라이언트에만 CAPTCHA를 표시하는 방법을 알아보세요.
이 기능을 도입하는 방법과 관련하여 궁금한 점이 있으신가요? 목요일 아침, 프라이빗 액세스 토큰에 관한 질의응답을 확인해 보시기 바랍니다. CAPTCHA 없는 경험을 Twitter에서 해시태그 #WWDC22Challenges!로 공유하는 것도 잊지 마세요.