design\project\学习 OAuth 读书笔记(一)

OAuth(一)

原文链接:OAuth 2.0 tutorial | OAuth flows

目录

    • OAuth(一)
        • 应用场景分析
          • 问题1:代表用户授予有限访问权限
          • OAuth 代表用户授权
          • 问题2:允许第三方应用程序有限的访问API(服务帐户)
      • OAuth2:授权码授权流程
        • 问题提出
        • 1. 授权码授权流程之前,OAuth 接入应用注册
        • 2. 授权码授权流程
          • 前端应用
          • 后端应用
      • OAuth2:授权流程踩雷与附加说明
        • 不要使用应用直接向授权服务器请求令牌
        • 不要使用密码授权
        • 不要使用服务账户授权
        • OAuth2:设备授权流程
        • OAuth2: 客户端授权流程
        • OAuth2:PKCE

OAuth = open authorization framework (开放授权框架)

代表用户或应用程序本身授予第三方对APl的有限访问权限。

OAuth 2.0授权框架使得第三方应用程序能够获得对HTTP服务的有限访问。包括允许代表资源所有者访问权限,和代表第三方应用程序自身获得访问权限。本规范取代并废除了RFC 5849中描述的OAuth 1.0协议。

The OAuth 2.0 authorization framework enables a third-partyapplication to obtain limited access to an HTTP service, either onbehalf of a resource owner by orchestrating an approval interactionand the HTTPrservice, or by allowing thebetween the resource ownerthird-party application toobtain access on its own behalf.Thisspecification replaces and obsoletes the OAuth 1.0 protocol describedin RFC 5849.

应用场景分析

问题1:代表用户授予有限访问权限

give a 3rd party limited access to APl on behalf of the user

栗如:现在某企业管理系统需要将某文件分享到钉钉企业网盘,便于其他外部联系人查看

直接在 opms 中保存 企业钉钉的用户名,密码,获得钉钉的全部权限不是一个好的选择(反模式)

design\project\学习 OAuth 读书笔记(一)_第1张图片
不同系统,有用完全不同的账户体系,如何进行部分授权

OAuth 代表用户授权

design\project\学习 OAuth 读书笔记(一)_第2张图片

问题2:允许第三方应用程序有限的访问API(服务帐户)

give 3rd party limited access to API on behalf of itself (service account)

design\project\学习 OAuth 读书笔记(一)_第3张图片
图:应用程序本身通过服务账户开放有限三方API访问



OAuth2:授权码授权流程

问题提出

从授权服务器获得 Token 的流程是什么 ?

授权码模式就是,无需用户每次都输入用户名和密码,就能从授权服务器获得 Token 的一种机制

1. 授权码授权流程之前,OAuth 接入应用注册

  1. 注册回调 URL
  2. 完善自身资料
    1. 上传 Logo
    2. 添加描述
  3. 获得应用ID(Client Id)
  4. 获得应用密钥(仅当机密客户 only if confidential client)

一般的,如果是 public client 栗如:前端可以通过 f12 查看到源码的 vue 项目,一般不设置应用密钥

如果是后端应用,则一般需要配置应用密钥

因为您可能需要有上百个 OAuth 配置,所以你需要一个应用管理系统来辅助你做应用注册

design\project\学习 OAuth 读书笔记(一)_第4张图片

2. 授权码授权流程

前端应用

design\project\学习 OAuth 读书笔记(一)_第5张图片
前端应用授权码授权流程

后端应用

design\project\学习 OAuth 读书笔记(一)_第6张图片
后端应用授权码授权流程



OAuth2:授权流程踩雷与附加说明

由于安全问题(令牌泄漏,例如通过浏览器历史记录或referrer header、令牌注入等)

不再推荐简化版授权流程

简化版授权流程通常没有应用密钥,因为简化版的流程通常用于本地授权或者 SPA 应用之间的授权

不要使用应用直接向授权服务器请求令牌

design\project\学习 OAuth 读书笔记(一)_第7张图片
直接使用授权码当 Token 使用

不要使用密码授权

design\project\学习 OAuth 读书笔记(一)_第8张图片

不要使用服务账户授权

design\project\学习 OAuth 读书笔记(一)_第9张图片

OAuth2:设备授权流程

由于设备输入能力有限,通常通过生成简短的授权码 + 双因素 认证的方式授权登录
design\project\学习 OAuth 读书笔记(一)_第10张图片

OAuth2: 客户端授权流程

design\project\学习 OAuth 读书笔记(一)_第11张图片

OAuth2:PKCE

OAuth授权码的扩展,以防止授权码(AuthorizationCode)注入和窃取。PKCE 最初是为无法对前端应用(公共客户端)开发的。现在建议所有接入应用都启用

为了进一步提升安全性能
design\project\学习 OAuth 读书笔记(一)_第12张图片

你可能感兴趣的:(java,学习,后端,分布式)