必須/任意でのスコープのリクエスト


必須/任意でのスコープのリクエスト

「インプリシットグラント」および「認可コードグラント」で説明されている認可リクエストは、リクエストされたスコープの必須/任意のオーバーライド情報も含めるように変更できます。これにより、Login with Amazonの同意ページで、ユーザーが同意する前にリクエストされたスコープを変更できるかどうかが決まります。この情報は、認可リクエストでscope_dataパラメーターを使用して指定します。以下の例ではインプリシットグラントを使用していますが、このパラメーターは認可コードグラントでも同様に機能します。

認可リクエスト

認可をリクエストするには、クライアント(ウェブサイト)がユーザーエージェント(ブラウザ)をリダイレクトして、次のパラメーターでhttps://www.amazon.com/ap/oaへの安全なHTTP呼び出しを行わせる必要があります。

パラメーター 説明
client_id 必須。クライアント識別子。Login with Amazonのクライアントとしてウェブサイトを登録すると提供されます。最大サイズは100バイトです。
scope 必須。リクエストの範囲。profileprofile:user_idpostal_code、またはスペースで区切られた組み合わせ(例:profile%20postal_code)である必要があります。詳細については、ユーザープロファイルを参照してください。
scope_data 省略可能。キーとなるスコープと、リクエストされたスコープが必須かどうかの値を含む、URLエンコードされたJSON BLOB。下記の例を参照してください。
response_type 必須。リクエストされたレスポンスのタイプ。このシナリオでは、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にはURIフラグメントとしてaccess_tokenと承認されたスコープが含まれます。次に例を示します。

パラメーター 説明
access_token ユーザーアカウントのアクセストークン。最大サイズは2,048バイトです。
token_type 返されるトークンのタイプ。bearerである必要があります。
expires_in アクセストークンが無効になるまでの秒数。
refresh_token 新しいアクセストークンのリクエストに使用できるリフレッシュトークン。最大サイズは2,048バイトです。
scope 必須。リクエストの範囲。
state 推奨。このリクエストからレスポンスまでの状態を維持するためにクライアントが使用する不透明型の値。認可サービスがユーザーをクライアントに戻すときに、この値をパラメーターに含めます。また、クロスサイトリクエストフォージェリを防ぐためにも使用されます。

エラーは、インプリシットグラントに記載されている方法で同様に処理できます。