美文网首页
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

相关文章

  • Spring Security Oauth2

    oauth2理解oauth2理解oauth2参考 oauth2流程 基本概念 Resource Owner: 资源...

  • OAuth2授权码模式详细流程(一)——站在OAuth2设计者的

    本文来自于公众号链接: OAuth2授权码模式详细流程(一)——站在OAuth2设计者的角度来理解code [图...

  • OAuth2理解

    OAuth2简介 什么是OAuth2 OAuth2是一个工业级标准的授权协议。 用于REST/API的代理授权框架...

  • 理解OAuth2

    理解OAuth2 Oatuh2用来做什么 有这样一种场景,一个用户(假设是QQ),希望让一个第三方的应用(比如说某...

  • ID Token - JWT

    我们来继续前两章(OAuth2 总结, 对OpenID Connect的理解)的讨论,进入对JWT的理解。先来简单...

  • 微服务安全

    OAuth2 白话OAuth2 什么是OAuth Spring Security OAuth2

  • Spring OAuth2(JDBC)

    一、Spring OAuth2 Spring OAuth2是OAuth2协议的完整实现,如果你对OAuth2协议不...

  • laravel 搭建oauth2认证服务,可用于app登录等验证

    oauth2 oauth2是一种验证方式, 这里不加以解释,不明白的小伙伴可以看一看阮一峰的文章-理解oauth2...

  • OAuth2的理解

    1.何谓OAuth2: OAuth 是一个开放标准,该标准允许用户让第三方应用访问该用户在某一网站上存储的私密资源...

  • OAuth2基本概念

    OAuth2 基础概念 标签(空格分隔): OAuth2 什么是OAuth2 ? OAuth2.0是OAuth协议...

网友评论

      本文标题:OAuth2理解

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