`

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 成为互联网上许多开放平台和API的标准,允许用户授权第三方应用在用户同意的情况下...

    OAuth2.0协议中文版

    OAuth 2.0 协议中文译本共分为九大部分,分别介绍了 OAuth 2.0 协议的背景知识、术语中英对照表、OAuth 2.0 协议的中文译本、OAuth 2.0 协议的工作流程、OAuth 2.0 协议的安全机制、OAuth 2.0 协议的优点、OAuth 2.0...

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

    这个协议的中文译本以及相关文档,包括“OAuth_2.0_中文译本.docx”、“RFC6749.zh_cn.md”和“RFC 6749-OAuth 2.0授权框架.pdf”,旨在帮助中国开发者更好地理解和实施OAuth 2.0。 OAuth 2.0 的核心概念包括以下几...

    完整Oauth 2.0实现实例

    OAuth 2.0 是一种广泛使用的授权框架,它允许第三方应用在用户许可的情况下访问其私有资源。在本文中,我们将深入探讨 OAuth 2.0 的核心概念,并结合 Java 实现来理解其工作原理。 OAuth 2.0 主要分为四个角色:...

    OAuth2.0协议中文版.pdf

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

    OAuth2.0 中文译本

    OAuth 2.0 中文译本 OAuth 2.0 是一种授权协议,旨在解决第三方应用访问受保护资源的问题。该协议将客户端和资源拥有者的角色进行分离,从而解决了传统的基于客户端-服务器的身份验证模型中的问题。 背景知识: ...

    cas3.5.0集成oauth2.0协议

    OAuth2.0是一种授权框架,允许第三方应用在用户许可的情况下,访问特定资源。它主要用于安全地实现用户数据的共享,比如社交媒体登录、云存储服务等。OAuth2.0的核心是将用户的授权过程与实际的服务提供者分离,这样...

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

    **OAuth2.0简介** OAuth2.0是一种授权框架,广泛应用于Web API的身份验证和授权。它允许第三方应用在用户授权的情况下,访问该用户的特定资源,而无需获取用户的用户名和密码。OAuth2.0的核心是将认证和授权分离,...

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

    OAuth2.0是一种开放标准,用于授权第三方应用访问用户存储在另一服务提供商(如社交媒体网站)上的私有资源,而无需共享用户的登录凭证。在Django框架中实现OAuth2.0授权登录,可以让开发者轻松地为他们的Web应用...

    微信oauth2.0授权

    微信OAuth2.0授权是一种广泛应用于移动应用和网站的第三方登录解决方案,主要目的是为了安全地获取用户的微信身份标识——openid,以便提供个性化服务或者与其他微信功能集成。在本文中,我们将详细探讨微信OAuth2.0...

    Oauth2.0 协议 服务端 客户端 thinkphp5.0

    OAuth2.0是一种广泛使用的开放授权协议,它允许第三方应用在用户无需透露其登录凭证的情况下,获取有限的访问权限去操作用户的资源。这个协议的主要目的是为了解决API的安全访问问题,尤其是在社交媒体、云存储和...

    OAuth_2.0中文译本.rar

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

    OAuth2.0代码模拟实现

    OAuth2.0是一种广泛使用的授权框架,用于在第三方应用与用户资源之间建立安全的数据共享机制。这个框架允许用户授权第三方应用访问他们存储在特定服务提供商(如Google或Facebook)上的数据,而无需分享他们的登录...

    c# OAuth2.0

    OAuth2.0是一种授权框架,广泛应用于Web应用和API接口的安全访问控制,允许第三方应用在用户许可的情况下,访问其存储在服务提供商上的特定资源。在C#开发环境中,我们可以使用OAuth2.0来实现社交平台如QQ和新浪的...

    oauth2.0服务端客户端代码jar包

    OAuth2.0是一种广泛使用的开放授权协议,它允许第三方应用在用户许可的情况下访问其存储在另一服务提供商上的私有资源。这个协议的核心是为了解决API的安全访问问题,避免用户直接将用户名和密码提供给第三方应用。...

    java实现oauth2.0服务端+客户端(含JWT)

    OAuth 2.0 是一个授权框架,用于安全地允许第三方应用访问用户存储在另一服务上的资源,而无需共享用户凭证。在这个Java实现中,我们利用了MAVEN作为项目管理工具和OLTU库来构建OAuth 2.0服务端和客户端。同时,数据...

    oauth2.0中文译本.doc

    ### OAuth 2.0 中文译本核心知识点详解 #### 一、背景知识与重要性 **OAuth 2.0** 是一个开放标准,用于实现应用程序间的授权过程,特别是允许第三方应用安全地获取用户的数据访问权限,而无需直接提供用户凭据。...

    OAuth2.0 使用到的jar包

    OAuth2.0是一种广泛应用于各种在线服务的授权框架,它允许第三方应用安全地访问用户的受保护资源,而无需用户直接共享他们的登录凭证。在Java环境中实现OAuth2.0,通常会依赖于一些特定的jar包。这些jar包包含了处理...

    OAuth2.0协议原理与实现

    OAuth2.0协议是一种广泛应用于第三方登录及授权的标准协议。相比于OAuth1.0版本,OAuth2.0进行了多方面的优化和改进,例如简化了授权流程、取消了Token的加密过程,并且强制使用HTTPS协议以增强安全性。OAuth2.0协议...

Global site tag (gtag.js) - Google Analytics