Device Authorization Grant

テレビやCLIなど入力制約のある端末を、別のブラウザを使って安全に認可するフローです。

DeviceTV / CLI
ProofUser code
ChannelSecondary browser

このフローで、
何をするの?

このフローのゴール

文字入力が難しいテレビやCLIを、スマートフォンなど別の端末から認可します。

01まず全体像

テレビ側に短いコードとURLを表示し、ユーザーは操作しやすい端末でログインして承認します。テレビは承認が終わったかを一定間隔で確認します。

02身近な例で考える

テレビに表示された引換番号をスマートフォンの受付へ見せて、テレビ用の利用許可を受け取るイメージです。

03最後にどうなる?

承認された端末だけがアクセストークンを受け取り、APIを利用できるようになります。

登場人物

図では、縦の列ごとに担当者やシステムを分けています。

O
Operator

処理を開始する人や運用システムです。フローによっては途中から登場しません。

C
Client

ユーザーに代わって認可を依頼し、許可されたAPIを呼び出すアプリです。

A
Authorization

ログイン、同意、コードやトークンの発行を担当する信頼できるサーバーです。

R
Resource

アクセストークンを確認して、許可されたデータや機能を提供するAPIです。

図の読み方: 光る丸が今説明している通信です。自動再生を止めたいときは「Pause」を押し、気になる矢印を選んでください。

Interactive sequence
OOperatorResource Owner
CClientApplication
AAuthorizationToken Service
RResourceProtected API
01

Client Authorization

デバイスコードを要求

このステップで行うこと

端末がclient_idとscopeをDevice Authorization Endpointへ送ります。

なぜ必要?

公開クライアントとして秘密情報を端末へ埋め込みません。

このあと

次は「コードとURLを返却」へ進みます。

REQUEST / RESPONSE EXAMPLEDevice → Device Authorization Endpoint
REQUEST
POST /oauth2/device_authorization
Content-Type: application/x-www-form-urlencoded
Accept: application/json

client_id=tv-client&scope=openid%20profile
レスポンス
HTTP/1.1 200 OK
Content-Type: application/json
Accept: application/json

{
  "device_code": "GmRhmhcxhwAzkoEqiMEg...",
  "user_code": "WDJB-MJHT",
  "verification_uri": "https://auth.example/device",
  "expires_in": 1800,
  "interval": 5
}

※ トークン、challenge、Credential IDなどは説明用に短縮したサンプル値です。

同じ仕様のフローを、続けて理解する。