官方文档:https://developer.okta.com/docs/concepts/oauth-openid/#choosing-an-oauth-2-0-flow
OAuth2.0 协议中授权方式:
- 授权码模式(authorization code)
- 简化模式 或者 隐式许可 (implicit)
- 密码模式 或者 资源所有者密码凭证(resource owner password credentials)
- 客户端模式 (client credentials)
授权方式 | 认证用户 | 认证client | 使用场景 |
---|---|---|---|
授权码模式 | ✅ | ✅ | public client或者confidential client均可使用,但推荐使用PKCE拓展增强安全性 |
隐式许可 | ✅ | ❌ | |
客户端模式 | ❌ | ✅ | client访问自身的资源(而不是用户的资源) |
密码模式 | ✅ | ✅ |
这个表格也可以对应着看到下面 ID token部分,只有 client credentials(客户端模式)不能够获取 ID token,因为只有客户端模式是没有用户认证的。
在Okta官方文档中,根据你的Application类型,推荐你使用对应的flow:
OAuth2.0 Flow | Application type | notes |
---|---|---|
Authorization Code Flow | Server-side | s's's |
Authorization Code Flow with PKCE or Implicit Flow (当您正在构建的SPA在不支持PKCE的Web加密的较旧的浏览器中运行时) | SPA(Single-Page Application) | |
Authorization Code Flow with PKCE | Native | |
Resource Owner Password Flow | Trusted | xx |
Client Credentials | Service | xxx |
然后说道,你的Application 需要 ID token吗?
image.pngAny OAuth flow can give you an access token, but not all support ID tokens.
所有的OAuth flow 都可以给你提供 access token,但是不是所有的flow 都支持ID token。
image.pngWhat kind of client are you building?
OAuth 2.0流的类型取决于您要构建的客户端类型。此流程图可以快速帮助您确定要使用的流程。
这里判断is your client public?
, 这个意思是说用户可以接触到你的 client 的代码。因为如果能接触到代码,代码里面又有保密的信息,那么就是不安全的。这里public的 client有: SPA、mobile or native app.
如果是SPA 或者是 native app的话,就选择: authorization code with PKCE 或者 implicit flow。
这里回顾下Authorization Code Flow with PKCE or Implicit Flow (当您正在构建的SPA在不支持PKCE的Web加密的较旧的浏览器中运行时)
,这里说的就是 如果你是一个 SPA的应用,但是因为是在一个比较老的浏览器或者不支持 Web crypto 的浏览器的时候,只能选择 implicit flow
,只验证用户,不验证 client。如果支持 web crypto, 那么 SPA 或者 native app 都应该选择 authorization code with PKCE
.
网友评论