如何从OAuth2.0返回批准的范围

Jak*_*kob 4 oauth-2.0

与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"
 }
Run Code Online (Sandbox Code Playgroud)

我应该将范围包含为以空格分隔的列表,逗号分隔列表还是JSON文件?

 {
   "scope": [ "read", "write", "foobar" ],
   "access_token":"2YotnFZFEjr1zCsicMWpAA",
   "token_type":"example",
   "expires_in":3600,
   "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
   "example_parameter":"example_value"
 }
Run Code Online (Sandbox Code Playgroud)

小智 9

我对RFC 6749的解释是,范围应指定为包含空格分隔列表的字符串.由于缺乏一个例子,该标准对解释有些开放.

"scope": "read write foobar"
Run Code Online (Sandbox Code Playgroud)

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

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

RFC 6749第5.1节说:

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

RFC 6749第3.3节说:

scope = scope-token*(SP范围标记)