デバイス・コード権限付与タイプ
この権限付与タイプは、データの入力方法が簡単ではないデバイス(ゲーム・コンソール、ストリーミング・メディア・プレーヤ、デジタル画像フレームなど)でクライアントが実行され、クライアントで認可サーバーからの受信リクエスト受信できない場合に使用します。
たとえば、顧客がRoku、デジタル画像フレームまたはゲーム・コンソールを購入したとします。顧客は、映画、画像またはゲームをクラウドからフェッチするには、アクセス・トークンが必要になります。クライアントは、ユーザーのストリーミング・メディア・プレーヤ(Rokuなど)またはデジタル画像フレームと対話するかわりに、別のコンピュータまたはデバイス(デスクトップ・コンピュータ、スマートフォンまたはタブレット)を使用して、認可サーバーに接続し、アクセス・リクエストを承認するようにユーザーに指示します。クライアントは受信リクエストを受信することができないため、ユーザーが承認プロセスを完了するまで認可サーバーを繰り返しポーリングします。
次のダイアグラムに、デバイス・コード権限付与タイプのフローを示します。
このOAuthフローでは、次のようになります。
このデバイス・フローでは、クライアント・シークレットを使用してデバイス・コードおよびユーザー・コードを取得することはありません。クライアント・シークレットは、アクセス・トークンの取得時に使用されます(クライアントに割り当てられている場合)。
-
デバイス・クライアントは、アイデンティティ・ドメインの
/deviceエンドポイントに対して未認証リクエストを作成します。デバイスは、デバイス・コード、ユーザー・コードおよび検証URIを受信します。デバイス・クライアントは、ユーザーにユーザー・コード
(user_code)を表示し、ユーザーがユーザー・コードを入力するために必要なURL(verification-uri)を提供します(図には示されていません)。 -
デバイスクライアントは、ユーザーが承認されているかどうかを知りません。デバイス・クライアントは、ユーザーが検証ページでユーザー・コードを入力するまで、アクセス・トークンをバックグラウンドで
oauth2/v1/token)に繰り返しリクエストします。 -
ユーザーは確認ページにアクセスしてサインインし、ユーザー・コードを入力します。
-
ユーザーがユーザー・コードを入力し、アクセスを認可すると、OAuthサーバーによってアクセス・トークンが発行され、ユーザーにはデバイスを介して、保護されたデータへのアクセス権が付与されます。
| 機能 | 使用可能 |
|---|---|
| ブラウザベースのエンド・ユーザーとの対話 | はい |
| 認証のために外部アイデンティティ・プロバイダの使用が可能 | はい |
| リフレッシュ・トークンを許可 | はい |
「デバイス・コード権限付与タイプの認可フローの例」を参照してください。
デバイス・コード付与タイプの認可フローの例
デバイス・コード付与タイプは、データ入力方法(ゲーム・コンソール、ストリーミング・メディア・プレーヤ、デジタル・ピクチャ・フレームなど)が簡単でないデバイス上でデバイス・クライアントが実行され、認可サーバーから受信リクエストを受信できない特定の付与フローを提供します。
デバイス・クライアントを介して、保護されたリソースにアクセスするためのアクセス・トークンを取得するには、デバイス・クライアントと直接対話するかわりに、デバイス・クライアントが別のコンピュータまたはデバイスを使用して認可サーバーに接続し、アクセス・リクエストを承認するようにユーザーに指示します。デバイス・クライアントは、ユーザーが承認プロセスを完了するまで、認可サーバーを繰り返しポーリングします。
アイデンティティ・ドメイン・コンソールでデバイス・コード権限付与タイプを使用してアプリケーションを作成する場合は、権限付与タイプとして「デバイス・コード」を選択します。
デバイス・コード権限付与タイプおよび権限フロー図の詳細は、「デバイス・コード権限付与タイプ」を参照してください。
認可フロー
-
デバイス・クライアントは、認証されていないリクエストを
/oauth2/v1/deviceエンドポイントに対して実行します。イベントURLには、リクエストされているアクセスのタイプを示す問合せパラメータが含まれます。
リクエストの例
curl -i -k -H 'Authorization: application/x-www-form-urlencoded; charset=utf-8' --request POST 'https://<domainURL>/oauth2/v1/device' -d 'response_type=device_code&scope=http://example.com/quotes&client_id=<client-id>' -
レスポンスには、OAuthクライアント・アプリケーションからのデバイス・コード、ユーザー・コードおよび検証URIが含まれます。
レスポンスの例
{ "expires_in": 300, "device_code": "4d03f7bc-f7a5-4795-819a-5748c4801d35", "user_code": "SDFGHJKL", "verification_uri": "http://<domainURL>/ui/v1/device" } -
デバイスには、ユーザー・コード
(user_code)が表示され、ユーザーがユーザー・コードを入力するために必要なURL(validation-uri)が提供されます。 - デバイスクライアントアプリケーションは、ユーザーが承認されているかどうかを知りません。ユーザーがクライアントのリクエストを認可(または拒否)している間、クライアントはトークン・エンドポイント
(oauth2/v1/token)で認可サーバーを繰り返しポーリングして、ユーザーの認可ステップが完了したかどうかを確認します。クライアントは、リクエストに検証コードとそのクライアント識別子を含めます。リクエストの例: 機密クライアント
curl -i -k -H 'Authorization: application/x-www-form-urlencoded; charset=utf-8' -H 'Authorization: Basic <base64 clientid:secret> --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=urn:ietf:params:oauth:grant-type:device_code&device_code=4d03f7bc-f7a5-4795-819a-5748c4801d35'リクエストの例: パブリック・クライアント
curl -i -k -H 'Authorization: application/x-www-form-urlencoded; charset=utf-8' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=urn:ietf:params:oauth:grant-type:device_code&client_id=3e51760ceb1245b7b77d0b1ff280bb72&device_code=4d03f7bc-f7a5-4795-819a-5748c4801d35'クライアント・アサーションを使用したリクエストの例
curl -i -k -H 'Authorization: application/x-www-form-urlencoded; charset=utf-8' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=urn:ietf:params:oauth:grant-type:device_code&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=<clientAssertion>&device_code=4d03f7bc-f7a5-4795-819a-5748c4801d35'SAMLアサーションを使用するリクエストの例
curl -i -k -H 'Authorization: application/x-www-form-urlencoded; charset=utf-8' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=urn:ietf:params:oauth:grant-type:device_code&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Asaml2-bearer&client_assertion=<samlAssertion>&device_code=4d03f7bc-f7a5-4795-819a-5748c4801d35'mTLSを使用したリクエストの例
secureDomainURLの取得方法については、「アクセス権限タイプ」を参照してください。curl -v \ --cert cert.crt \ --key key.key \ --cacert ca.crt \ --location '<secureDomainURL>/oauth2/v1/token' \ --header 'Authorization: Basic <base64Encoded clientid:secret>' --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=client_credentials' \ --data-urlencode 'client_id=<client-id>' \ --data-urlencode 'scope=urn:opc:idm:_myscopes_' - ユーザーがユーザー・コードを入力してアクセスを認可すると、OAuth認可サーバーはユーザーを認証し、リクエスト先のクライアント・アプリケーションで付与されたアプリケーション・ロールによって表される権限に基づいて、適用可能なすべてのスコープを含むアクセス・トークンを返します。
- リクエスト元のデバイス・クライアントは、APIコールのアクセス・トークンを使用して、保護されたデータを取得します。