为图书馆顾客指定一个与 OAuth2.0 兼容的 API,我偶然发现了OAuth 范围。OAuth2.0 规范在某些方面似乎有不同的解释,例如GitHub 使用逗号来分隔范围,而 Google 使用空格,如 RFC 6749 中所定义。RFC 告诉:
如果颁发的访问令牌范围与客户端请求的范围不同,授权服务器必须包含“范围”响应参数以通知客户端授予的实际范围
但是后面的规范中没有提到范围响应参数。特别是我想实现资源所有者密码凭证授予(第 4.3 节)。OAuth2.0 规范中给出了这个响应示例:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"token_type":"example",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
"example_parameter":"example_value"
}
我应该将范围包含为空格分隔列表、逗号分隔列表还是 JSON 数组?
{
"scope": [ "read", "write", "foobar" ],
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"token_type":"example",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
"example_parameter":"example_value"
}