美文网首页
OAuth2理解

OAuth2理解

作者: 一生逍遥一生 | 来源:发表于2019-09-30 10:23 被阅读0次

    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

    相关文章

      网友评论

          本文标题:OAuth2理解

          本文链接:https://www.haomeiwen.com/subject/cbkhuctx.html