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

时间:2012-11-08 14:31:00

标签: oauth-2.0

指定与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"
 }

1 个答案:

答案 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范围标记)