迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 网络 >

OAuth2.0 - 客户端凭据扩展知识点

作者:迹忆客 最近更新:2021/08/17 浏览次数:

本篇我们承接 OAuth2.0 颁发访问令牌的方式这篇文章,介绍其中涉及客户端凭据的几个相关的知识点:

  • 获得最终用户授权
  • 授权响应
  • 错误响应和错误代码

下面我们分别来看一下

获得最终用户授权

授权端点是在授权服务器上发出身份验证请求的 URL。其实说白了就是对应的一个授权登录界面。资源所有者在其中登录并允许访问客户端应用程序的数据。

授权端点可以通过三种方式定义 -

  • 授权端点
  • 重定向端点
  • 令牌端点

授权端点

授权端点可用于与资源所有者进行交互。首先,用户通过使用客户端应用程序访问资源所有者的资源。在进行授权登录之前,需要在认证服务中注册重定向URI(其实就是我们说的回调地址)。在注册重定向 URI(统一资源标识符)期间,认证服务将向客户端应用程序提供客户端 ID 和客户端密钥,这二者用来唯一标识一个客户端应用程序。接下来,用户可以通过授权服务器上的客户端应用程序登录。其中包含授权端点。登录成功之后授权端点将用户重定向到 URI(统一资源标识符)并且提供给用户一个身份验证Code。

OAuth2.0-授权端点

重定向端点

用户访问位于客户端应用程序中重定向 URI(统一资源标识符)的页面。然后客户端应用程序向授权服务器发送客户端 ID、客户端密钥和上一步获取到的身份验证 Code。

OAuth2.0-授权端点-返回身份验证Code

令牌端点

此时,客户端应用程序发送给验证服务客户端 ID、客户端密钥和授权码以获得访问令牌。

OAuth2.0-令牌端点-返回访问令牌

客户端应用程序将这些凭据与令牌一起发送给用户。用户收到令牌后,可以将其发送到要访问的资源服务,如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 提供的令牌已过期或无效。

上面的错误响应及代码是在文档中定义的。在实际实现过程中,可能会有出入,但要有相应的文档说明。

除非注明转载,本站文章均为原创或翻译,欢迎转载,转载请以链接形式注明出处

本文地址:

迹忆客

专注技术分享,项目实战分享!

技术宅 乐于分享 7年编程经验
社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

热门文章

教程更新

热门标签