OAuth 2.0 认证

joudys / 2023-07-21 / 原文

简单介绍

Oauth 2.0是目前最流行的授权机制,用来授权第三方应用,获取用户的数据。

OAuth(开放授权)是一个开放标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不 需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。OAuth2.0是OAuth协议的延续版本,但不向 后兼容OAuth 1.0即完全废止了OAuth1.0。很多大公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服 务。

授权机制设计

OAuth 2.0是一种授权机制,主要用来颁发令牌(token),该机制允许用户将存储在一个服务提供商中的信息给另一个服务提供商使用。

在这里我们用微信登录QQ音乐为例(微信授权登录是通过OAuth2.0机制实现的)。当我们在登录QQ音乐界面选择微信登录时,QQ音乐会发起一个微信授权登录请求,这时候我们的微信就会跳出是否允许登陆的界面,当我们点击允许后,微信就会返回一个access_token,然后QQ音乐使用access_token获取我们的微信名、微信头像、微信好友列表等信息,当然这只是个大概的步骤,但可以 帮我们更快的理解OAuth机制。

令牌与密码

令牌(Token)和密码(password)作用都是相同的,都可以进行登录,但是还是有所区别:

  1. 令牌是短期的,一旦超过有效期就会失效。密码则是长期有效,如果用户不对密码进行修改,就不会发生改变。
  2. 令牌可以被数据所有者撤销,撤销即时效,比如说,当我们在微信上,选择登出QQ音乐,QQ音乐上的access_token就会失效,具体表现就是QQ音乐会让我们重新登录。而密码用户不更改就不会被撤销。
  3. 令牌有权限范围(scope),比如说QQ音乐(第三方服务)使用access_token可以获取我们微信上的用户名,微信头像,好友等信息,但是无法获取微信的密码等私密信息,也无法更改我们的微信名,密码等信息。而密码具有完整的权限,可以获取该密码对应用户所有信息并更改。所以在网络服务中,只读属性的令牌比读写属性的令牌更加安全。

以上令牌具有的属性,保证了令牌既可以让第三方应用获取权限,同时又随时可控,不会危机授权方系统的安全。这些就是OAuth 2.0的优点。

注意,只要知道了令牌,就能进入系统。系统一般不会再次确认身份,所以令牌必须保密,泄漏令牌与泄漏密码的后果是一样的。 这也是为什么令牌的有效期,一般都设置得很短的原因。

OAuth 2.0四种授权方式

OAuth2.0的标准是RFC 6749文件,该文件对OAuth 2.0进行了解释,并规定了四种授权方式。

RFC 6749对OAuth解释为:

OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者。......资源所有者同意以后,资源服务器可以向客户端颁发令牌。客户端通过令牌,去请求数据。

这段话的意思就是,OAuth 的核心就是向第三方应用颁发令牌。然后,RFC 6749 接着写道:

(由于互联网有多种场景,)本标准定义了获得令牌的四种授权方式(authorization grant )。

本文参考:

  • OAuth 2.0 的一个简单解释 - 阮一峰的网络日志 (ruanyifeng.com)
  • OAuth 2.0 的四种方式 - 阮一峰的网络日志 (ruanyifeng.com)
  • 准备工作 | 微信开放文档 (qq.com)
  • [RFC 6749 - The OAuth 2.0 Authorization Framework (ietf.org)](