`

OAuth 2.0中文译本 (三)

阅读更多

6.2 WWW-Authenticate响应头部字段

 

如果对于受保护资源的请求不包含验证证书,包含一个无效的访问令牌,或格式不正确,那么资源服务器必须包含一个HTTP “WWW-Authenticate”响应头部字段。这个“WWW-Authenticate”头部字段使用[RFC2617]定义的框架,如下所示:

 

challenge = "OAuth2" [ RWS 1#param ]

 

param = scope /

error / error-desc / error-uri /

( token "=" ( token / quoted-string ) )

 

scope = "scope" "=" <"> scope-v *( SP scope-v ) <">

scope-v = 1*quoted-char

 

quoted-char = ALPHA / DIGIT /

"!" / "#" / "$" / "%" / "&" / "'" / "(" / ")" /

"*" / "+" / "-" / "." / "/" / ":" / "<" / "=" /

">" / "?" / "@" / "[" / "]" / "^" / "_" / "`" /

"{" / "|" / "}" / "~" / "\" / "," / ";"

 

error = "error" "=" quoted-string

error-desc = "error_description" "=" quoted-string

error-uri = "error_uri" = <"> URI-reference <">

 

“scope”属性是一个空格隔开的作用域值的列表,表明了为了访问受保护资源所需要访问令牌作用域。“scope”属性一定不能出现多次。

 

如果对于受保护资源的请求包含一个访问令牌并且验证失败了,那么资源服务器应该包含“error”属性来向客户端提供为何访问请求被拒绝的原因。参数值在6.2.1中描述。另外,资源服务器可能包含“error_description”属性来提供一个人类可读的解释,或者包含“error-uri”属性用一个绝对URI来指定一个用于解释错误的人类可读的网页。“error”、“error_description”和“error-uri”属性一定不能出现多次。

 

例如,对于一个缺少验证的受保护资源请求的响应:

 

HTTP/1.1 401 Unauthorized

WWW-Authenticate: OAuth2

 

对于一个使用过期访问令牌尝试验证的受保护资源请求的响应:

 

HTTP/1.1 401 Unauthorized

WWW-Authenticate: OAuth2

error="invalid_token",

error_description="The access token expired"

 

6.2.1 错误码

 

当一个请求失败时,资源服务器使用恰当的HTTP状态码(典型的如400、401或403)进行响应,并且在响应中包含下列错误码之一:

 

invalid_request

请求缺少某个必需参数,包含一个不支持的参数或参数值,参数重复,使用多种方式包含访问令牌,或者请求格式不正确。资源服务器应该使用HTTP 400(Bad Request)状态码进行响应。

 

invalid_token

提供的访问令牌是过期的、已撤销的、格式不正确的,或由于其它原因是无效的。资源服务器应该使用HTTP 401(Unauthorized)状态码进行响应。客户端可能请求一个新的访问令牌并重试受保护资源请求。

 

insufficient_scope

请求需要比访问令牌所提供的权限更高的权限。资源服务器应该使用HTTP 403(Forbidden)状态码进行响应并且包含“scope”属性,带上访问该受保护资源必需的作用域。

 

[[增加扩展错误码的机制]]

 

如果请求中缺少任何验证信息(即客户端没有意识到验证是必需的或尝试使用一个不支持的验证方法),那么资源服务器不应该包含一个错误码和其它错误信息。

 

例如:

 

HTTP/1.1 401 Unauthorized

WWW-Authenticate: OAuth2

 

7. 扩展

 

7.1 定义新的客户端证书类型

 

[[待定]]

 

7.2 定义新的Endpoint参数

 

希望在终端用户授权endpoint和令牌endpoint上定义新的请求和响应参数的应用,应该使用下列两种方式之一:在参数注册表中注册(遵从9.1节描述的流程),或使用“x_”参数名前缀。

 

使用“x_”参数名前缀的参数必须局限于那些不会被广泛应用的针对厂商特性的扩展,并且特定于授权服务器使用场景的实现细节。所有其它参数必须被注册,并且一定不能使用“x_”参数名前缀。

 

参数名必须遵从param-name的ABNF,并且参数值语法必须被规范地定义(例如,使用ABNF,或者引用到现存参数的语法)。

 

param-name = 1*name-char

name-char = "-" / "." / "_" / DIGIT / ALPHA

 

7.3 定义新的头部字段参数

 

希望在OAuth “WWW-Authenticate”头部字段中定义新参数的应用必须在参数注册表中进行注册,遵从9.1节描述的流程。

 

参数名必须遵从param-name的ABNF并且不能以“x_”开头。参数值必须遵从param-value的ABNF并且语法必须被规范地定义(例如,使用ABNF,或者引用到现存参数的语法)。

 

param-value = quoted-value | quoted-string

 

7.4 定义新的访问许可类型

 

断言访问许可类型允许授权服务器接受其它未规定的访问许可。希望定义其它访问许可类型的应用能够通过利用新的或现存的断言类型和格式进行实现。

 

8. 安全考虑

 

[[待定]]

 

9. IANA事项

 

9.1 OAuth参数注册表

 

本文档设立参数注册表。

 

用于终端用户授权endpoint的请求、终端用户授权endpoint的响应、令牌endpoint的请求、令牌endpoint的响应或“WWW-Authenticate”头部字段的多余参数,在一个或多个“指派专家”(由IESG或他们的代理机构指定)的指导下进行注册,遵从所需的规范(使用[RFC5226]的术语)。然而,为了允许在发布之前对值进行分配,“指派专家”们一旦认同这样的一个规范能够发布,可能就立即批准注册。

 

注册请求应该发送给[待定]@ietf.org邮件组进行评审和讨论,使用恰当的标题(如“Request for parameter: example”)。[[RFC-EDITOR注解:邮件组名称应该在与IESG和IANA磋商后确定。建议名称:oauth-ext-review。]]

 

在14天之内,“指派专家”们会批准或拒绝注册请求,并将结果告知邮件组和IANA。拒绝的决定应该包含一个解释,并且,如果可行的话,应该包含如何进行修改的建议。在21天以上未确定的注册请求会交由IESG处理(使用iesg@iesg.org邮件组)。

 

9.1.1 注册模板

 

Parameter name: 请求的名称(例如“example”)。

 

Parameter usage location: 参数能够被使用的位置。可能的位置包括:终端用户授权endpoint的请求、终端用户授权endpoint的响应、令牌endpoint的请求、令牌endpoint的响应或“WWW-Authenticate”头部字段。

 

Change controller: 对于标准轨道的RFC,写明“IETF”。对于其它规范,使用负责机构的名称。其它细节(例如,邮编地址,电子邮件地址,主页URI)也可以包含。

 

Specification document(s): 对规定参数的文档引用,可取的方式是包含一个能够获取到文档拷贝的URI。对于相关章节的标示也可以包含,但不是必需的。

 

Related information: 可选地,对于包含更多相关信息的额外文档的引述。

 

9.1.2 例子

 

下面是对于本规范定义的“scope”参数的参数注册请求:

 

Parameter name: scope

 

Parameter usage location: The end-user authorization endpoint

request, the end-user authorization endpoint response, the token

endpoint request, the token endpoint response, and the

"WWW-Authenticate" header field.

 

Change controller: IETF

 

Specification document(s): [[ this document ]]

 

Related information: None

 

 

附录 翻译略。

分享到:
评论

相关推荐

    OAuth 2.0中文译本

    OAuth 2.0很可能是下一代的“用户验证和授权”标准,目前在国内还...为了弘扬“开放精神”,让业内的人更容易理解“开放平台”相关技术,进而长远地促进国内开放平台领域的发展,笔者特意将OAuth 2.0协议翻译成中文。

    OAuth2.0 中文译本

    rft6749 OAuth2.0中文译本,免费下载。

    OAuth2.0中文译本

    OAuth2.0的中文译本,OAuth2.0的中文译本

    OAuth2.0中文译本和授权框架等3本.zip

    OAuth_2.0_中文译本.docx RFC6749.zh_cn.md RFC 6749-OAuth 2.0授权框架.pdf

    OAuth2.0协议中文版.pdf

    OAuth2.0是OAuth协议的延续版本,但不向前兼容OAuth 1.0(即完全废止了OAuth1.0)。 OAuth 2.0关注客户端开发者的简易性。要么通过组织在资源拥有者和HTTP服务商之间的被批准的交互动作代表用户,要么允许第三方应用...

    OAuth_2.0中文译本.rar

    进而长远地促进国内开放平台领域的发展,笔者特意将 OAuth 2.0 协议翻译成中文。 目前 OAuth 2.0 还没有最后定稿,最新的修改版是第 11 个版本,本文下面的翻译即基 于这个第 11 版本。原文见 ...

    springboot集成oauth2.0

    springboot 集成oauth2.0服务器,基于oauth2.0授权码形式集成

    完整Oauth 2.0实现实例

    完整Oauth 2.0 代码实现,包含数据库脚本,使用说明,导入数据库脚本,修改数据库配置可直接运行。

    oauth2.0中文译本.doc

    OAuth 2.0很可能是下一代的“用户验证和授权”标准,目前在国内还没有...为了弘扬“开放精神”,让业内的人更容易理解“开放平台”相关技术,进而长远地促进国内开放平台领域的发展,笔者特意将OAuth 2.0协议翻译成中文

    OAuth2.0协议中文版

    OAuth2.0协议中文版,方便了解OAuth2.0协议

    微信oauth2.0授权

    通过点击viewbutton获取用户openid,实现方式oauth2.0认证

    Oauth2.0登录鉴权验证

    Oauth2.0,第三方登录鉴权验证教程。

    Spring Security OAuth2.0学习笔记.zip

    Spring Security OAuth2.0学习笔记 什么是认证、授权、会话。 Java Servlet为支持http会话做了哪些事儿。 基于session认证机制的运作流程。 基于token认证机制的运作流程。 理解Spring Security的工作原理,Spring ...

    webapi基于Owin中间件的oauth2.0身份认证

    基于Owin中间件的OAuth2.0身份认证,文章位置https://blog.csdn.net/u013938578/article/details/82956188

    OAUTH2.0+OpenLDAP技术框架

    OAUTH2.0+OpenLDAP技术框架,及适用场景,综合价值等PPT文档,可修改!!!

    cas3.5.0集成oauth2.0协议

    cas3.5.0集成oauth2.0协议,模拟cas3.5.0通过oauth2.0协议与集成了coauth2.0的cas进行模拟通信。可以实现 与新浪微博等第三方身份验证平台对接,实现单点登录。

    基于Django2.1.2的OAuth2.0授权登录

    基于Django2.1.2的OAuth2.0授权登录 大学生课程设计 基于Django2.1.2的OAuth2.0授权登录的课程设计 自己大二写的课程设计

    OAuth2.0协议原理与实现

    OAuth2.0协议原理与实现

Global site tag (gtag.js) - Google Analytics