OAuth2简介
什么是OAuth2
OAuth2是一个工业级标准的授权协议。
- 用于REST/API的代理授权框架。
- 基于令牌Token的授权,在五需暴露用户密码的情况下,使应用能获取对用户数据的有限访问权限。
- 解耦认证和授权。
- 标准的安全框架,支持多种用力场景:
- 服务器端WebApp
- 浏览器单页SPA
- 无线/原生APP
- 服务器对服务器之间
OAuth2优势
- OAuth2.0 比OAuth1.0易于实现
- 更安全,客户端不接触用户密码,服务器更易集中保护
- 广泛传播并被持续采用
- 短寿命和封装的token
- 资源服务器和授权服务器解耦
- 集中授权,简化客户端
- Http/Json友好,易于请求和传递token
- 考虑多种客户端场景
- 客户可以具有不同的信任级别
OAuth2缺点
- 框架太宽泛,造成各种实现的兼容性和互操作性差
- 和OAuth1.0不兼容
- OAuth2不是一个认证协议
OAuth2术语
术语 | 客户应用 | 资源服务器 | 授权服务器 | 资源拥有者 | 客户凭证 | 令牌 | 作用域 |
---|---|---|---|---|---|---|---|
介绍 | 需要访问用户受保护的资源 | web站点,存储用户受保护的资源 | 客户应用认证成功并获得授权, 向用户颁发Access Token |
拥有资源的用户 | 客户的clientId和密码用于认证客户 | 授权服务器认证颁发的令牌 | 可以访问的范围 |
OAuth2 运行流程
oauthflow.png- 用户打开客户端之后,客户端要求用户给予授权
- 用户统一给予客户端授权
- 客户端使用上一步获取的授权,向认证服务器申请令牌
- 认证服务器对客户端进行认证以后,确认无误,同意发放令牌。
- 客户端使用令牌,向资源服务器申请获取资源
- 资源服务器确认令牌无误,同意向用户开发资源
OAuth2 授权模式
授权码模式
说明
- 通过前端渠道客户获取授权码
- 通过后端渠道,客户使用authorization code去交换access Token和可选的 refresh token
- 假定资源拥有者和客户在不同的设备上
- 最安全的流程,因为令牌不会传递经过user-agent
执行流程
bg2014051204.png- A 用户访问客户端,后者将前者导向认证服务器。
- B 用户选择是否给予客户端授权。
- C 假设用户给予授权,认证服务器将用户导向客户端事先指定的"重定向URI"(redirectio URI),同时附上一个授权码。
- D 客户端收到授权码,附上早先的"重定向URI",向认证服务器申请令牌。这一步是在客户端后台的服务器上完成的,对用户不可见。
- E 认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)。
简化模式
说明
- 适用于公开的浏览器单页应用
- Access Token直接从授权服务器返回 (只有前端渠道)
- 不支持refresh tokens 假定资源所有者和公开客户应用在同一 个设备上
- 最容易受安全攻击
执行流程
implicit.png- 客户端将用户导向认证服务器
- 用户决定是否给于客户端授权
- 假设用户给予授权,认证服务器将用户导向客户端指定的"重定向URI",并在URI的Hash部分包含了访问令牌
- 浏览器向资源服务器发出请求,其中不包括上一步收到的Hash值
- 资源服务器返回一个网页,其中包含的代码可以获取Hash值中的令牌
- 浏览器执行上一步获得的脚本,提取出令牌
- 浏览器将令牌发给客户端。
密码模式
说明
- 使用用户名密码登录的应用,例如桌面 App
- 使用用户名/密码作为授权方式从授权服 务器上获取access token
- 一般不支持refresh tokens
- 假定资源拥有者和公开客户在相同设备上
执行流程
password.png- 用户向客户端提供用户名和密码。
- 客户端将用户名和密码发给认证服务器,向后者请求令牌。
- 认证服务器确认无误后,向客户端提供访问令牌。
客户端模式
说明
- 适用于服务器间通信场景,机密客户代 表它自己或者一个用户
- 只有后端渠道,使用客户凭证获取一个 access token
- 因为客户凭证可以使用对称或者非对称 加密,该方式支持共享密码或者证书
执行流
client.png- 客户端向认证服务器进行身份认证,并要求一个访问令牌。
- 认证服务器确认无误后,向客户端提供访问令牌。
授权类型选择流程图
workflow.png参考文章
理解OAuth 2.0
https://oauth.net/2/
https://tools.ietf.org/html/rfc6749
深度剖析OAuth2和微服务安全架构.pdf
OAuth2.0最简向导.pdf
网友评论