必要/自愿请求范围

必要/自愿请求范围

可以修改隐式授予和授权码授予中提到的授权请求,使请求范围包含必要/自愿覆盖信息。这将控制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 可选。编码JSON Blob的URL,包含作为密钥的范围和请求范围必需的值。请参阅以下示例。
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参数是经过URL编码的"profile postal_code"scope_data参数是经过URL编码的"{"profile":{"essential":true}, "postal_code":{"essential":false}}"。每个范围的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 error ' + response.error);
        return;
 }
<!-- Handle the response -->
});

授权响应

客户端(网站)指导用户代理(浏览器)作出授权请求后,授权服务会将用户代理重定向到客户端指定的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。您可以通过状态值跟踪用户请求前的状态。此外,状态还可用于阻止跨站点伪造请求

错误也可以按照授权码授予中的方法进行处理。