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_token?code=123
- 用code换取access_token和refresh_token
授权码模式是最复杂的,也是最安全的
- 客户端请求验证,由用户获取 code
- 客户端拿到 code,请求 token
- 销毁 code,下发 token,而用户拿不到 token,客户端保存
- 客户端使用 token 访问资源
- 过期后使用 refresh_token 刷新 token 再次使用
授权码模式-token 过期
1.3 简化模式
- 这种模式比授权码模式少了 code 环节,回调 url 直接携带 token
- 这种模式的使用场景是基于浏览器的应用
- 这种模式基于安全性考虑,建议把 token 时效设置短一些
- 不支持 refresh token
- 不安全,适用于纯静态页面应用
简化模式适用于纯静态页面应用。该模式下,access_token 容易泄露且不可刷新
- 用户请求网站,如:www.baidu.com
- 重定向到一个授权页面
- 用户同意授权
- 重定向到网站,并带上access_token如:www.baidu.com?access_token=123
- 获取到资源服务器的资源
- 不支持 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 认证:
- 系统敏感资源服务进行安全认证及资源保护工作
- 多个服务的统一登录认证中心、内部系统之间受保护资源请求
- 将受保护的用户资源授权给第三方信任用户
- 以后要做开发平台,类似百度开放平台,腾讯开放平台
3 应用场景
3.1 案例:停车事件
OAuth2 解决:资源授权问题
酒店停车事件
- 开豪车到酒店
- 酒店服务生代泊车
- 泊车钥匙(只能开两公里,不能打开车内酒柜)
- 泊车
- 取车(自己的钥匙,全功能)
3.2 定义
OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全、开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息,并且这是安全的。
专用名词:
- Third-party application:第三方应用程序,又称"客户端"(client)。
- Resource Owner:资源所有者,又称"用户"(user)。
- User Agent:用户代理,指浏览器。
- Authorization server:认证服务器,即服务提供商专门用来处理认证的服务器。
- Resource server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。
3.3 场景
场景一、微信登录
场景二、移动端登录