アクセストークンとリフレッシュトークンを取得する

アクセストークンとリフレッシュトークンを取得する

デバイス認可リクエストのレスポンスが戻りしだい、トークンエンドポイントhttps://api.amazon.com/auth/o2/tokenに対してデバイストークンリクエストを開始し、ユーザーのアクセストークンを取得する必要があります。

デバイス認可レスポンスで指定された値を超えない間隔で、エンドポイントをポーリングする必要があります。エンドポイントをポーリングする期間は、アクセストークンを受け取るまで、ユーザーによってリクエストが拒否されるまで、device_codeの有効期限(デバイス認可レスポンスのexpires_inパラメーターの値)が切れるまで、のいずれかです。

ユーザーがコードを入力するまで、デバイストークンレスポンスはauthorization_pendingのみを返します。ユーザーがコードを正しく入力すると、そのユーザーのアクセストークンとリフレッシュトークンがデバイストークンレスポンスに追加されます。

デバイストークンリクエスト

Login with Amazonにユーザーのアクセストークンをリクエストするには、次のパラメーターを使用し、https://api.amazon.com/auth/o2/tokenに対して安全なHTTP POSTリクエストを行います。

パラメーター 説明
grant_type 必須。このシナリオを進めるにはdevice_codeである必要があります。
device_code 必須。Login with Amazonからデバイス認可レスポンスで返されるdevice_codeの値です。
user_code 必須。Login with Amazonからデバイス認可レスポンスで返されるuser_codeの値です。

次に例を示します。

POST /auth/o2/token HTTP/1.1
Host: api.amazon.com
Content-Type: application/x-www-form-urlencoded

user_code=AAYJHL&device_code=B66fd882-7405-4e9a-bfb9&grant_type=device_code

デバイストークンリクエストでは、OAuth 2.0 Device Flow仕様のセクション3.4を実装しています。

デバイストークンレスポンス

ユーザーがコードの入力を完了すると、Login with Amazonから受け取るデバイストークンレスポンスには次のパラメーターが含まれるようになります。

パラメーター 説明
access_token 文字列。ユーザーのアクセストークン。最大サイズは2,048バイトです。
refresh_token 文字列。新しいアクセストークンをリクエストするために使用できるリフレッシュトークン。最大サイズは2,048バイトです。
token_type 文字列。常にbearer。
expires_in 整数。アクセストークンが有効な秒数。

次に例を示します。

HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "2YomnFZEjfjklsadjkwpAA",
    "token_type": "bearer",
    "expires_in": 3600,
    "refresh_token": "nGzv3JORFQXG3x21KW1a"
}

デバイストークンレスポンスでは、OAuth 2.0 Device Flow仕様のセクション3.5を実装しています。

デバイストークンエラー

リクエストの形式が正しくないまたはサーバーに問題がある場合、デバイストークンレスポンスはエラーを返すことがあります。

</colgroup>
エラーコード 説明
invalid_request リクエストに必須パラメーターがない、値が無効、または形式に誤りがあります。
invalid_client クライアントの認証に失敗しました。これは、認可サービスがHTTP401(認可エラー)のステータスコードを返さない場合に使用されます。
invalid_grant 認可グラントまたはリフレッシュトークンが無効、期限切れ、取り消し済み、デバイストークンリクエストと一致しない、既に別のクライアントに発行されている、のいずれかの状態です。
unauthorized_client 認証済みのクライアントはデバイストークンリクエストを実行する権限を与えられていません。
unsupported_grant_type 間違ったtoken_typeが指定されています。bearerである必要があります。

デバイストークンリクエストにこの種類のトークンリクエストに固有のエラーが含まれる場合があります。

エラーコード 説明
authorization_pending ユーザーが検証用URLでユーザーコードをまだ入力していません。
slow_down デバイスのポーリングが早すぎます。デバイストークンリクエストは、デバイス認可レスポンスの間隔で指定された頻度で行うようにしてください。
expired_token device_codeの有効期限が切れています。新しいデバイス認可リクエストを実行してください。

{"error_description":"The request is missing a required parameter : client_secret","error":"invalid_request"}というエラーのトラブルシューティングを行う場合、このドキュメントでは、[TVおよびその他のデバイスの設定] で設定を作成することによりclient_idを取得済みであると見なしていることに注意してください。このプロセスではclient_secretは発行されません。LWAリフレッシュトークン取得の詳細については、リフレッシュトークンの使用を参照してください。

リフレッシュトークンの使用

アクセストークンは、設定された時間(通常はexpires_inパラメーターで返されます)が経過すると無効になります。アクセストークンと一緒に送付されたリフレッシュトークンを使用して、新しいアクセストークンを取得することができます。

リフレッシュトークンを送信するために、クライアントは次のパラメーターでhttps://api.amazon.com/auth/o2/tokenに対して安全なHTTP POSTを実行します。

パラメーター 説明
grant_type 必須。リクエストされたアクセスグラントのタイプ。refresh_tokenを指定する必要があります。
refresh_token 必須。最初のアクセストークンレスポンスで返されたリフレッシュトークン。
client_id 必須。クライアント識別子。これは、デバイス認可リクエストで指定したclient_idと一致している必要があります。

次に例を示します。

POST /auth/o2/token HTTP/1.1
Host: api.amazon.com
Content-Type: application/x-www-form-urlencoded;charset=UTF-8

grant_type=refresh_token&refresh_token=Atzr|IQEBLzAtAhRPpMJxdwVz2Nn6f2y-tpJX2DeX...&client_id=foodev

リフレッシュトークンの送信に対するレスポンスがデバイストークンレスポンスです。