本文已参与「新人创作礼」活动,一起开启掘金创作之路。
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
企业微信授权登录即采用了这种模式。
授权码模式是最复杂的,也是最安全的:
- 客户端请求验证,由用户获取 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 场景
- 场景一、微信登录
-
场景二、移动端登录
-
END -