我们一起来学习 OAuth2 四种授权使用场景

1,025 阅读4分钟
本文已参与「新人创作礼」活动,一起开启掘金创作之路。

OAuth2 四种授权使用场景

1.OAuth 2.0 定义了四种授权方式

  • 密码模式(resource owner password credentials)
  • 授权码模式(authorization code)
  • 简化模式(implicit)
  • 客户端模式(client credentials)

1.1 密码模式

  • 此模式是最不推荐的,因为 client 可能存了用户密码
  • 此模式主要用来做遗留项目升级为 oauth2 的适配方案
  • 如果 client 是自己的应用,也是可以
  • 支持 refresh token
  • 一般在内部系统中使用,调用者是以用户为单位 用户向客户端提供自己的用户名和密码,向 "服务商提供商" 换取 access_token

1.2 授权码模式

  • 此模式算是正宗的 oauth2 的授权模式
  • 设计 auth code,通过这个 code 再获取 token
  • 支持 refresh token
  • 功能最完整、流程最严密的授权模式,通常使用在公网的开放平台中 适用于有自己的服务器的应用,它是一个一次性的临时凭证,用来换取 access_token 和 refresh_token

一旦换取成功,code 立即作废,不能再使用第二次。

  • 用户请求网站,如:www.baidu.com
  • 重定向到一个授权页面
  • 用户同意授权
  • 重定向到应用的一个回调地址,如:www.baidu.com/recieve_tok…
  • 用 code 换取 access_token 和 refresh_token

企业微信授权登录即采用了这种模式。

授权码模式是最复杂的,也是最安全的:

  1. 客户端请求验证,由用户获取 code
  2. 客户端拿到 code,请求 token
  3. 销毁 code,下发 token,而用户拿不到 token,客户端保存
  4. 客户端使用 token 访问资源
  5. 过期后使用 refresh_token 刷新 token 再次使用

授权码模式-token 过期

1.3 简化模式

  • 这种模式比授权码模式少了 code 环节,回调 url 直接携带 token
  • 这种模式的使用场景是基于浏览器的应用
  • 这种模式基于安全性考虑,建议把 token 时效设置短一些
  • 不支持 refresh token
  • 不安全,适用于纯静态页面应用
  • 简化模式适用于纯静态页面应用。该模式下,access_token 容易泄露且不可刷新
  1. 用户请求网站,如:www.baidu.com
  2. 重定向到一个授权页面
  3. 用户同意授权
  4. 重定向到网站,并带上 access_token 如:www.baidu.com?access_token=123
  5. 获取到资源服务器的资源

缺点:

  • 不支持 refresh_token
  • 浏览器即客户端
  • 用户拿到 token,可能安全性有问题

1.4 客户端模式

  • 该模式直接根据 client 的 id 和密钥即可获取 token 无需用户参与
  • 这种模式比较适合消费 api 的后端服务,比如拉取用户组信息
  • 不支持 refresh token
  • 一般在内部系统之间的 API 调用;两个平台之间调用;调用者是以平台为单位如第三方,或者调用者是一个后端的模块,没有用户界面的时候,可以使用客户端模式。

鉴权服务器直接对客户端进行身份验证,验证通过后,返回 token。

  • 公开服务调用的一种类型
  • 与用户无关的应用
  • 服务器之间通信
  • 对用户透明,增强站点功能的一类

2 小结

密码模式

为遗留系统设计,支持 refresh token,不建议使用

授权码模式

正宗方式,支持 refresh token

简化模式

为 web 浏览器应用设计,不支持 refresh token

客户端模式

为后台 api 服务消费者设计,不支持 refresh token

  • 以下场景可以考虑引入 Oauth 2.0 认证:
  1. 系统敏感资源服务进行安全认证及资源保护工作
  2. 多个服务的统一登录认证中心、内部系统之间受保护资源请求
  3. 将受保护的用户资源授权给第三方信任用户
  4. 以后要做开发平台,类似百度开放平台,腾讯开放平台

3 应用场景

3.1 案例:停车事件

OAuth2 解决:资源授权问题

酒店停车事件

  • 开上我的敞篷特斯拉到酒店
  • 酒店服务生代泊车
  • 泊车钥匙(只能开两公里,不能打开车内酒柜)
  • 泊车
  • 取车(自己的钥匙,全功能)

3.2 定义

OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全、开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息,并且这是安全的。

  • 专用名词:
  1. Third-party application:第三方应用程序,又称"客户端"(client)。
  2. Resource Owner:资源所有者,又称"用户"(user)。
  3. User Agent:用户代理,指浏览器。
  4. Authorization server:认证服务器,即服务提供商专门用来处理认证的服务器。
  5. Resource server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。

3.3 场景

  • 场景一、微信登录

  • 场景二、移动端登录

  • END -