OAuth2 四种授权

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

  • 密码模式(resource owner password credentials)
  • 授权码模式(authorization code)
  • 简化模式(implicit)
  • 客户端模式(client credentials)
OAuth2 四种授权使用场景,图文结合不能再清晰了

1.1 密码模式

  • 这种模式是最不推荐的,因为 client 可能存了用户密码
  • 这种模式主要用来做遗留项目升级为 oauth2 的适配方案
  • 当然如果 client 是自家的应用,也是可以
  • 支持 refresh token
  • 一般在内部系统中使用,调用者是以用户为单位

用户向客户端提供自己的用户名和密码,向 "服务商提供商" 换取 access_token

OAuth2 四种授权使用场景,图文结合不能再清晰了

1.2 授权码模式

  • 这种模式算是正宗的 oauth2 的授权模式
  • 设计了 auth code,通过这个 code 再获取 token
  • 支持 refresh token
  • 功能最完整、流程最严密的授权模式,通常使用在公网的开放平台中

适用于有自己的服务器的应用,它是一个一次性的临时凭证,用来换取 access_tokenrefresh_token

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

  1. 用户请求网站,如:www.baidu.com
  2. 重定向到一个授权页面
  3. 用户同意授权
  4. 重定向到应用的一个回调地址,如:www.baidu.com/recieve_token?code=123
  5. code换取access_tokenrefresh_token
OAuth2 四种授权使用场景,图文结合不能再清晰了

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

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

授权码模式-token 过期

OAuth2 四种授权使用场景,图文结合不能再清晰了

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. 获取到资源服务器的资源
OAuth2 四种授权使用场景,图文结合不能再清晰了
  1. 不支持 refresh_token
  2. 浏览器即客户端
  3. 用户拿到 token,可能安全性有问题

1.4 客户端模式

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

如第三方,或者调用者是一个后端的模块,没有用户界面的时候,可以使用客户端模式。

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

OAuth2 四种授权使用场景,图文结合不能再清晰了

公开服务调用的一种类型

  1. 与用户无关的应用
  2. 服务器之间通信
  3. 对用户透明,增强站点功能的一类

2 小结

密码模式

  • 为遗留系统设计,支持 refresh token

授权码模式

  • 正宗方式,支持 refresh token

简化模式

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

客户端模式

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

以下场景可以考虑引入 Oauth 2.0 认证:

  • 系统敏感资源服务进行安全认证及资源保护工作
  • 多个服务的统一登录认证中心、内部系统之间受保护资源请求
  • 将受保护的用户资源授权给第三方信任用户
  • 以后要做开发平台,类似百度开放平台,腾讯开放平台

3 应用场景

3.1 案例:停车事件

OAuth2 解决:资源授权问题

酒店停车事件

  1. 开豪车到酒店
  2. 酒店服务生代泊车
  3. 泊车钥匙(只能开两公里,不能打开车内酒柜)
  4. 泊车
  5. 取车(自己的钥匙,全功能)

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 场景

场景一、微信登录

OAuth2 四种授权使用场景,图文结合不能再清晰了

场景二、移动端登录

OAuth2 四种授权使用场景,图文结合不能再清晰了
THE END
分享
二维码
< <上一篇
下一篇>>