4

为图书馆顾客指定一个与 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"
 }
4

1 回答 1

9

我对 RFC 6749 的解释是,范围应指定为包含空格分隔列表的字符串。由于缺乏示例,该标准在某种程度上可以解释。

"scope": "read write foobar"

RFC 6749 第 4.3.3 节访问令牌响应说:

如果访问令牌请求有效且被授权,授权服务器会发出访问令牌和可选的刷新令牌,如第 5.1 节所述。

RFC 6749 第 5.1 节说:

范围可选,如果与客户要求的范围相同;否则,需要。访问令牌的范围如第 3.3 节所述。

RFC 6749 第 3.3 节说:

范围 = 范围令牌 *( SP 范围令牌 )

于 2012-11-09T15:50:57.590 回答