必要/自愿请求范围
必要/自愿请求范围
可以修改隐式授予和授权码授予中提到的授权请求,使请求范围包含必要/自愿覆盖信息。这将控制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 | 可选。编码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
。您可以通过状态值跟踪用户请求前的状态。此外,状态还可用于阻止跨站点伪造请求。
错误也可以按照授权码授予中的方法进行处理。