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 中保存 企业钉钉的用户名,密码,获得钉钉的全部权限不是一个好的选择(反模式)
OAuth 代表用户授权
问题2:允许第三方应用程序有限的访问API(服务帐户)
give 3rd party limited access to API on behalf of itself (service account)
图:应用程序本身通过服务账户开放有限三方API访问
OAuth2:授权码授权流程
问题提出
从授权服务器获得 Token 的流程是什么 ?
授权码模式就是,无需用户每次都输入用户名和密码,就能从授权服务器获得 Token 的一种机制
1. 授权码授权流程之前,OAuth 接入应用注册
- 注册回调 URL
- 完善自身资料
- 上传 Logo
- 添加描述
- 获得应用ID(Client Id)
- 获得应用密钥(仅当机密客户 only if confidential client)
一般的,如果是 public client 栗如:前端可以通过 f12 查看到源码的 vue 项目,一般不设置应用密钥
如果是后端应用,则一般需要配置应用密钥
因为您可能需要有上百个 OAuth 配置,所以你需要一个应用管理系统来辅助你做应用注册
2. 授权码授权流程
前端应用
前端应用授权码授权流程
后端应用
后端应用授权码授权流程
OAuth2:授权流程踩雷与附加说明
由于安全问题(令牌泄漏,例如通过浏览器历史记录或referrer header、令牌注入等)
不再推荐简化版授权流程
简化版授权流程通常没有应用密钥,因为简化版的流程通常用于本地授权或者 SPA 应用之间的授权
不要使用应用直接向授权服务器请求令牌
直接使用授权码当 Token 使用
不要使用密码授权
不要使用服务账户授权
OAuth2:设备授权流程
由于设备输入能力有限,通常通过生成简短的授权码 + 双因素 认证的方式授权登录
OAuth2: 客户端授权流程
OAuth2:PKCE
OAuth授权码的扩展,以防止授权码(AuthorizationCode)注入和窃取。PKCE 最初是为无法对前端应用(公共客户端)开发的。现在建议所有接入应用都启用
为了进一步提升安全性能