指定与OAuth2.0兼容的API for library patrons,我偶然发现了 OAuth scopes 。 OAuth2.0规范在某些方面似乎有不同的解释,例如GitHub uses commas在Google使用空格时划分范围,如RFC 6749中所定义.RFC告诉:
如果发出访问令牌范围 与客户要求的授权不同 服务器必须包含“范围”响应参数来通知 授予实际范围的客户
但是后面的规范中没有提到范围响应参数。特别是我想实现Resource Owner Password Credentials Grant(第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"
}
答案 0 :(得分:9)
我对RFC 6749的解释是,范围应指定为包含空格分隔列表的字符串。由于缺乏一个例子,该标准对解释有些开放。
"scope": "read write foobar"
RFC 6749第4.3.3节访问令牌响应说:
如果访问令牌请求有效且已获得授权,则授权 服务器发出访问令牌和可选的刷新令牌,如上所述 在5.1节中。
RFC 6749第5.1节说:
范围 可选,如果与客户要求的范围相同; 否则,需要。访问令牌的范围为 由第3.3节描述。
RFC 6749第3.3节说:
scope = scope-token *(SP范围标记)