アクセストークンとリフレッシュトークンを取得する
デバイス認可リクエストのレスポンスが戻りしだい、トークンエンドポイント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を実装しています。
デバイストークンエラー
リクエストの形式が正しくないまたはサーバーに問題がある場合、デバイストークンレスポンスはエラーを返すことがあります。
エラーコード | 説明 |
---|---|
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
リフレッシュトークンの送信に対するレスポンスがデバイストークンレスポンスです。