デバイス・コード権限付与タイプ

この付与タイプは、データ入力方法が簡単でないデバイス(ゲーム・コンソール、ストリーミング・メディア・プレーヤ、デジタル画像フレームなど)でクライアントが実行され、クライアントが認可サーバーからの受信リクエストを受信できない場合に使用します。

たとえば、顧客がRoku、デジタル画像フレームまたはゲーム・コンソールを購入したとします。映画、画像またはゲームをクラウドからフェッチするには、顧客はアクセストークンが必要です。クライアントは、ユーザーのストリーミング・メディア・プレーヤ(Rokuなど)またはデジタル画像フレームと対話するかわりに、別のコンピュータまたはデバイス(デスクトップ・コンピュータ、スマートフォンまたはタブレット)を使用して、認可サーバーに接続し、アクセス・リクエストを承認するようにユーザーに指示します。クライアントは受信リクエストを受信できないため、ユーザーが承認プロセスを完了するまで認可サーバーを繰り返しポーリングします。

次のダイアグラムに、デバイス・コード権限付与タイプのフローを示します。

デバイス・コード権限付与タイプのフローを示す図。

このOAuthフロー:

ノート

このデバイス・フローでは、クライアント・シークレットを使用してデバイス・コードおよびユーザー・コードを取得することはありません。クライアント・シークレットは、アクセス・トークンの取得時に使用されます。
  1. デバイス・クライアントは、認証されていないリクエストをアイデンティティ・ドメイン/deviceエンドポイントに対して実行します。デバイスは、デバイス・コード、ユーザー・コードおよび検証URIを受信します。

    デバイス・クライアントは、ユーザー・コード(user_code)をユーザーに表示し、ユーザーがユーザー・コードを入力するために必要なURL (verification-uri)を提供します(図には示されていません)。

  2. デバイスクライアントは、ユーザーが承認されているかどうかを認識しません。デバイス・クライアントは、ユーザーが検証ページでユーザー・コードを入力するまで、(バックグラウンドでoauth2/v1/token)に)アクセス・トークンを繰り返しリクエストします。

  3. ユーザーは検証ページにアクセスし、サインインしてユーザー・コードを入力します。

  4. ユーザー・コードを入力してアクセスを認可すると、OAuthサーバーによってアクセス・トークンが発行され、ユーザーにはデバイスを介して、保護されたデータへのアクセス権が付与されます。

関数 選択可能
ブラウザベースのエンド・ユーザーとの対話 はい
認証のために外部アイデンティティ・プロバイダの使用が可能 はい
リフレッシュ・トークンを許可 はい

デバイス・コード付与タイプの認可フローの例を参照してください。

デバイス・コード権限付与タイプの認可フローの例

デバイス・コード付与タイプは、簡単なデータ入力方法(ゲーム・コンソール、ストリーミング・メディア・プレーヤ、デジタル画像フレームなど)を持たないデバイス上でデバイス・クライアントが実行され、デバイス・クライアントが認可サーバーから受信リクエストを受信できない特定の付与フローを提供します。

デバイス・クライアントを介して保護されたリソースにアクセスするためのアクセス・トークンを取得するには、デバイス・クライアントと直接対話するかわりに、デバイス・クライアントが別のコンピュータまたはデバイスを使用して認可サーバーに接続し、アクセス・リクエストを承認するようにユーザーに指示します。デバイス・クライアントは、ユーザーが承認プロセスを完了するまで、認可サーバーを繰り返しポーリングします。

アイデンティティ・ドメイン・コンソールで「デバイス・コード」権限付与タイプを使用してアプリケーションを作成する場合は、権限付与タイプとして「デバイス・コード」を選択します。

デバイス・コード付与タイプおよび認可フロー図の詳細は、デバイス・コード付与タイプを参照してください。

承認フロー

  1. デバイス・クライアントは、認証されていないリクエストを/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>'
  2. レスポンスには、OAuthクライアント・アプリケーションからのデバイス・コード、ユーザー・コードおよび検証URIが含まれます。

    レスポンスの例

    { 
    "expires_in": 300, 
    "device_code": "4d03f7bc-f7a5-4795-819a-5748c4801d35", 
    "user_code": "SDFGHJKL",
    "verification_uri": "http://<domainURL>/ui/v1/device" 
    }
  3. デバイスには、ユーザー・コード(user_code)が表示され、ユーザーがユーザー・コードを入力するために必要なURL (validation-uri)が提供されます。

  4. デバイスクライアントアプリケーションは、ユーザーが承認されているかどうかを認識しません。ユーザーがクライアントのリクエストを認可(または拒否)している間、クライアントはトークン・エンドポイント(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'
  5. ユーザーがユーザー・コードを入力してアクセスを認可すると、OAuth認可サーバーはユーザーを認証し、リクエスト元のクライアント・アプリケーションに付与されたアプリケーション・ロールによって表される権限に基づいて、適用可能なすべてのスコープを含むアクセス・トークンを返します。
  6. リクエスト元のデバイス・クライアントは、APIコールのアクセス・トークンを使用して、保護されたデータを取得します。