必須/任意でのスコープのリクエスト
「インプリシットグラント」および「認可コードグラント」で説明されている認可リクエストは、リクエストされたスコープの必須/任意のオーバーライド情報も含めるように変更できます。これにより、Login with Amazonの同意ページで、ユーザーが同意する前にリクエストされたスコープを変更できるかどうかが決まります。この情報は、認可リクエストでscope_dataパラメーターを使用して指定します。
認可リクエスト
認可をリクエストするには、クライアント(ウェブサイト)がユーザーエージェント(ブラウザ)をリダイレクトし、次のパラメーターを使用してhttps://www.amazon.com/ap/oa
への安全なHTTP呼び出しを行う必要があります。
パラメーター | 説明 |
---|---|
client_id | 必須。クライアント識別子。Login with Amazonのクライアントとしてウェブサイトを登録すると提供されます。最大サイズは100バイトです。 |
scope | 必須。リクエストの範囲。profile 、profile:user_id 、postal_code 、またはこれらの組み合わせをスペースで区切って指定します(例:profile%20postal_code )。詳細については、ユーザープロファイルを参照してください。 |
scope_data | 省略可能。キーとなるスコープと、リクエストされたスコープが必須かどうかの値を含む、URLエンコードされたJSON BLOB。下記の例を参照してください。 |
response_type | 必須。リクエストされたレスポンスのタイプ。code またはtoken (廃止)を指定できます。 |
redirect_uri | 必須。認可サービスがユーザーをリダイレクトする必要があるHTTPSアドレス。 |
state | 推奨。このリクエストからレスポンスまでの状態を維持するためにクライアントが使用する不透明型の値。認可サービスがユーザーをクライアントに戻すときに、この値をパラメーターに含めます。また、クロスサイトリクエストフォージェリを防ぐためにも使用されます。詳細については、クロスサイトリクエストフォージェリを参照してください。 |
次に例を示します。
https://www.amazon.com/ap/oa?client_id=foodev
&scope=profile%20postal_code
&scope_data=%7B%22profile%22%3A%7B%22essential%22%3Atrue%7D%2C%22
postal_code%22%3A%7B%22essential%22%3Afalse%7D%7D
&response_type=code
&state=208257577ll0975l93l2l59l895857093449424
&redirect_uri=https://client.example.com/auth_popup/token
ここでは、scopeパラメーターには「profile postal_code」のURLエンコードされたバージョン、scope_dataには「{"profile":{"essential":true}, "postal_code":{"essential":false}}」のURLエンコードされたバージョンが指定されています。すべてのスコープのessentialプロパティは、trueまたはfalseに設定できます。JavaScript用のLogin with Amazon SDKを使用して認可リクエストを行うには、optionsオブジェクトを入力し、amazon.Login.authorizeを呼び出す必要があります。
options = {} ;
options.scope = 'profile postal_code';
options.scope_data = {
'profile' : {'essential': true},
'postal_code' : {'essential': false}
};
options.response_type='code';
amazon.Login.authorize(options, function(response) {
if ( response.error ) {
alert('oauthエラー' + response.error);
return;
}
<!-- レスポンスを処理します -->
});
認可レスポンス
クライアント(ウェブサイト)がユーザーエージェント(ブラウザ)に認可リクエストを指示すると、認可サービスによってユーザーエージェントはクライアントが指定したURIにリダイレクトされます。ユーザーがアクセスリクエストを許可した場合、そのURIには、認可コードを含むcode
パラメーターと、ユーザーが同意したスコープのリスト(+
で区切られます)を含むscope
パラメーターが含まれます。次に例を示します。
HTTP/1.1 302 Found
Location: https://client.example.com/cb?code=SplxlOBezQQYbYS6WxSbIA
&state=208257577ll0975l93l2l59l895857093449424
&scope=profile+postal_code
認可コードは18~128文字で、5分間有効です。
リダイレクトでは、認可リクエストでユーザーエージェントから渡されたstate
もコピーされます。この値によって、リクエスト前のユーザーの状態をトラッキングできます。また、クロスサイトリクエストフォージェリを防ぐためにも使用されます。
エラーは、認可コードグラントに記載されている方法で同様に処理できます。