PKCE解释:https ://www.oauth.com/oauth2-servers/pkce/
OAuth 流程示例:https : //developer.okta.com/docs/guides/implement-auth-code-pkce/use-flow/
我的问题更具体:如果实施 PKCE,是否有任何理由要求 state
?
state
通过让应用服务器验证它给客户端的状态与客户端给它的状态相同(在发出第一个 OAuth 请求之后)来阻止CSRF攻击
state
App Server为每个唯一的客户端随机生成并提供给客户端- 客户端发送
state
到 Auth Server,Auth Server 返回状态和代码 - 客户端向 App Server 发送
state
和编码 - 应用服务器确保
state
在第 1 步 ==state
在第 2 步
但是,如果您使用 PKCE 执行此操作:
- App Server
code_challenge
为每个唯一的客户端生成随机数并将其提供给客户端(我们现在可以忽略可选的散列) - 客户端提供
code_challenge
给 Auth Server,Auth Server 返回代码 - 客户端向应用服务器发送代码
- 应用服务器
code_challenge
在步骤 1 中将代码 & 发送到验证服务器,验证服务器code_challenge
在步骤 1 ==code_challenge
步骤 2 中进行验证
这似乎是完全相同的流程,除了您必须将其存储code_challenge
在您的服务器上,而不是state
存储在您的服务器或客户端的 cookie 中,并且最终检查由 Auth Server 而不是 App Server 完成。