OAuth 2.0 Device Authorization (RFC 8628)

OAuth 2.0 Device Authorization Grant

テレビ、ゲーム機、CLIなどブラウザや入力能力が限られる端末を、別端末のブラウザで認可する拡張仕様です。

STATUSPublished August 2019FLOWS1 documentedPrimary specification ↗

この仕様は、
何を解決するのか。

テレビアプリ、CLI、IoTなど、通常のブラウザリダイレクトを利用しにくいClientを設計する人向けです。

Device Authorization Grantは、テレビ、ゲーム機、プリンター、CLIのように、文字入力やブラウザ操作が難しい端末を認可するためのOAuth 2.0拡張です。認可を必要とする端末と、ユーザーがログインする端末を分けます。

対象端末は短いuser_codeとverification_uriを表示します。ユーザーはスマートフォンなど操作しやすい端末でコードを入力して承認し、対象端末は承認結果をToken Endpointへ問い合わせます。対象端末へパスワードを入力する必要はありません。

仕様が定める、大切なこと。

01

入力制約を回避する

リモコンやCLIで長いパスワードを入力せず、普段利用するスマートフォンの安全なブラウザでログインできます。

02

端末を明確に承認する

user_codeによって、スマートフォン上の承認操作と、認可を待っている対象端末を結び付けます。

03

非同期に結果を待つ

対象端末はdevice_codeを使って結果をpollし、承認が終わるまでauthorization_pendingを処理します。

01Device Code02User Code03Verification URI04Token Polling

安全に使うための確認事項。

仕様を実装するときは、正常系の通信だけでなく、値のすり替え、再利用、漏えいが起きた場合も考えます。

  1. 01

    user_codeとdevice_codeは別の値として扱い、device_codeを画面へ表示しません。

  2. 02

    expires_inを過ぎた要求を拒否し、device_codeは一度だけ使用可能にします。

  3. 03

    intervalを守り、slow_downを受け取った場合は問い合わせ間隔を延ばします。

  4. 04

    承認画面に対象端末、Client名、要求scopeを表示し、ユーザーが意図した要求か確認できるようにします。

この仕様に属するフロー

ほかの仕様との関係

RFC 8628はRFC 6749の拡張Grantです。OpenID Connectのopenid scopeと組み合わせれば認証にも利用できますが、CIBAとは開始方法が異なります。Device Flowは端末にコードを表示し、CIBAはClientがユーザー識別子を使って別端末へ認証要求を開始します。

OAuth 2.0 (RFC 6749)The OAuth 2.0 Authorization FrameworkOAuth 2.1OAuth 2.1 Authorization FrameworkOpenID Connect Core 1.0OpenID Connect Core 1.0FIDO2 WebAuthn Level 3Web Authentication: Public Key CredentialsFIDO2 CTAP 2.2Client to Authenticator ProtocolFIDO UAF 1.1Universal Authentication FrameworkFIDO U2F 1.2Universal Second FactorOpenID Connect CIBA Core 1.0Client-Initiated Backchannel AuthenticationOAuth 2.0 PKCE (RFC 7636)Proof Key for Code Exchange by OAuth Public ClientsJSON Web Token (RFC 7519)JSON Web Token (JWT)OAuth 2.0 DPoP (RFC 9449)OAuth 2.0 Demonstrating Proof of PossessionSAML 2.0Security Assertion Markup Language 2.0SCIM 2.0 (RFC 7644)System for Cross-domain Identity Management: Protocol