OAuth2.0 - 客户端凭据扩展知识点
本篇我们承接 OAuth2.0 颁发访问令牌的方式这篇文章,介绍其中涉及客户端凭据的几个相关的知识点:
- 获得最终用户授权
- 授权响应
- 错误响应和错误代码
下面我们分别来看一下
获得最终用户授权
授权端点是在授权服务器上发出身份验证请求的 URL。其实说白了就是对应的一个授权登录界面。资源所有者在其中登录并允许访问客户端应用程序的数据。
授权端点可以通过三种方式定义 -
- 授权端点
- 重定向端点
- 令牌端点
授权端点
授权端点可用于与资源所有者进行交互。首先,用户通过使用客户端应用程序访问资源所有者的资源。在进行授权登录之前,需要在认证服务中注册重定向URI(其实就是我们说的回调地址)。在注册重定向 URI(统一资源标识符)期间,认证服务将向客户端应用程序提供客户端 ID 和客户端密钥,这二者用来唯一标识一个客户端应用程序。接下来,用户可以通过授权服务器上的客户端应用程序登录。其中包含授权端点。登录成功之后授权端点将用户重定向到 URI(统一资源标识符)并且提供给用户一个身份验证Code。
重定向端点
用户访问位于客户端应用程序中重定向 URI(统一资源标识符)的页面。然后客户端应用程序向授权服务器发送客户端 ID、客户端密钥和上一步获取到的身份验证 Code。
令牌端点
此时,客户端应用程序发送给验证服务客户端 ID、客户端密钥和授权码以获得访问令牌。
客户端应用程序将这些凭据与令牌一起发送给用户。用户收到令牌后,可以将其发送到要访问的资源服务,如Google、微信等,访问系统中与登录用户相关的资源。
授权响应
授权响应可用于获取使用授权码访问系统中所有者资源的访问令牌。访问令牌由授权服务器在接收到客户端应用程序发送的客户端 ID、客户端密钥和授权Code时提供给客户端。
授权码将由授权服务器发出,允许使用以下参数访问请求
- Code - 这是一个必需参数,指定授权服务器生成授权代码。授权码的有效期最长为 10 分钟,且授权码不能多次使用。如果客户端应用程序多次使用授权代码,则授权服务器拒绝请求并取消之前根据授权代码颁发的所有令牌。
- State - 如果授权代码在授权请求中可用,则state是一个必需参数。
授权服务器提供授权代码并使用以下格式授予对客户端应用程序的访问权限
application/x-www-form-urlencoded
它是发出的请求的默认 MIME类型。必须以这样一种方式进行编码,即控制名称和值要被转义,空格字符被替换为“+”符号,键值对之间通过'&'分割等。
错误响应和代码
授权服务器以 HTTP 400 或 401 状态代码响应。这里,如果在授权期间发生错误,则有可能发生两种错误。在第一种情况下,客户端未被识别或已经被识别但是有其他错误。在第二种情况下,尽管准确地识别了客户端,但仍有其他事情失败。在这种情况下,错误响应被发送回客户端,如下所示
- error_description - 是一个可选的可读错误描述,由 Content-Language 标头指定的语言表示,适用于开发人员而不是最终用户。
- error_uri - 它是可读网页的可选链接,以及有助于解决问题的错误信息。
- error - 它是一组预定义的错误代码。
400 错误
下表显示了 400 错误及其说明。
错误 | 描述 |
---|---|
unsupported_over_http | OAuth 2.0 仅支持 https 调用。 |
version_rejected | 提供了不受支持的 OAuth 版本。 |
parameter_absent | 请求中缺少必需的参数。 |
parameter_rejected | 给定的参数太长。 |
invalid_client | 无效的客户端 ID |
invalid_request | 无效的请求参数 |
unsupported_response_type | 提供的响应类型与该特定请求不匹配 |
unsupported_grant_type | 提供与特定请求不匹配的授权类型 |
invalid_param | 提供了无效的请求参数 |
unauthorized_client | 客户端未被授予执行某些操作的权限 |
access_denied | 资源所有者拒绝授权请求 |
server_error | 意外错误 |
401 错误
下表显示了 401 错误及其说明
错误 | 描述 |
---|---|
token_expired | 提供的令牌过期。 |
invalid_token | 提供的令牌无效。 |
invalid_callback | 提供的带有请求的 URI 与使用者密钥不匹配。 |
invalid_client_secret | 提供的客户端服务器无效。 |
invalid_grant | 提供的令牌已过期或无效。 |
上面的错误响应及代码是在文档中定义的。在实际实现过程中,可能会有出入,但要有相应的文档说明。
相关文章
OAuth2.0 - 颁发访问令牌的方式
发布时间:2021/08/17 浏览次数:430 分类:网络
-
本篇文章主要是讲解如何使用 OAuth2.0 客户端的凭据来获取访问令牌。这里我们首先来看一下客户端的凭据。访问令牌是一个标识用户、应用程序或页面的字符串。
OAuth2.0 - 全面了解 OAuth2.0
发布时间:2021/08/17 浏览次数:256 分类:网络
-
最开始接触 OAuth2.0 的时候,经常将它和 SSO单点登录搞混。OAuth 是一种开放的授权协议,它是目前最流行的授权机制。