OAuth2.0流程简析

2019-07-17  本文已影响0人  __笙歌4J

什么是OAuth2.0?

OAuth 2.0是用于授权的行业标准协议。OAuth 2.0取代了在2006年创建的原始OAuth协议上所做的工作。OAuth 2.0侧重于客户机开发人员的简单性,同时为web应用程序、桌面应用程序、移动电话和客厅设备提供特定的授权流。该规范及其扩展正在IETF OAuth工作组中开发。

基本概念

1. OAuth Scopes

Scope是OAuth 2.0中的一种机制,用于限制应用程序对用户帐户的访问。应用程序可以请求一个或多个范围,然后在同意屏幕中向用户显示该信息,向应用程序发出的访问令牌将被限制在授予的范围内。

OAuth规范允许授权服务器或用户修改授予应用程序的范围,并将其与所请求的范围进行比较,尽管在实践中很少有这样的服务。

OAuth没有为范围定义任何特定的值,因为它高度依赖于服务的内部体系结构和需求。

2. OAuth 2.0 Grant Types

OAuth 2.0框架为不同的用例指定了几种授权类型,以及用于创建新授权类型的框架。
下面列出了最常见的OAuth 2.0授权类型。

  1. Authorization Code (认证代码)
    授权代码授权类型由机密和公共客户端使用,用于为访问令牌交换授权代码。
    当用户通过重定向URL返回到客户机后,应用程序将从URL获取授权代码并使用它请求访问令牌。

  2. Implicit (隐式授权)
    隐式授权类型是一种简化的流,可以由公共客户机使用,其中立即返回访问令牌,而不需要额外的授权
    代码交换步骤。
    通常不建议使用隐式流(有些服务器完全禁止这种流程)。自规范最初编写以来,行业最佳实践已经发生了变
    化,建议公共客户端应该使用带有PKCE扩展的授权代码流程。

    OAuth 2.0安全最佳实践文档建议不要完全使用隐式流,基于浏览器的应用程序的OAuth 2.0描述了使用PKCE授权代码流的技术。

  3. Password (密码授权)
    密码授予类型由第一方客户端使用,用于交换用户的凭证以获得访问令牌。
    因为这涉及到客户机向用户询问密码,所以第三方客户机不应该使用密码。在这个流中,用户的用户名和密码直接交换为访问令牌。

  4. Client Credentials (客户端证书授权)
    客户机凭据授予类型用于在用户上下文之外获取访问令牌。
    客户端通常使用它来访问关于自己的资源,而不是访问用户的资源。

  5. Device Code (设备码授权)
    设备流中的无浏览器或受输入限制的设备使用设备代码授予类型来为访问令牌交换以前获得的设备代码。
    设备代码授予类型值为urn:ietf:params:oauth:grant-type:device_code。

  6. Refresh Token (刷新token)
    当访问令牌过期时,客户端使用Refresh令牌授予类型将刷新令牌交换为访问令牌。
    这允许客户端继续拥有有效的访问令牌,而无需与用户进行进一步的交互。

流程图样例

oauth.png
上一篇 下一篇

猜你喜欢

热点阅读