当前 OAuth2.0 安全主题的最佳实践草案在第 3.1.1 节中有以下内容:
“使用授权授予类型的客户端必须使用 PKCE [RFC7636] 以便(在授权服务器的帮助下)检测并防止将授权代码注入(重放)授权响应的尝试。......注意:虽然到目前为止 PKCE被推荐作为一种保护原生应用程序的机制,这个建议适用于所有类型的 OAuth 客户端,包括 Web 应用程序。”
- “使用授权授权类型的客户端必须使用 PKCE ... 来检测和防止尝试将(回复)授权代码注入授权响应。”
- PKCE 究竟如何帮助“检测”回复验证码的尝试?它的 RFC中没有任何内容表明它比OAuth2.0 RFC更好地处理检测,如果请求包含已使用的身份验证代码,则必须拒绝请求。
- PKCE 究竟如何帮助“防止”对具有处理身份验证代码请求和重定向的后端的 Web 应用程序的授权代码重放攻击?我在假设身份验证代码请求和重定向都发生在 TLS 的情况下进行操作。有什么机会(以及它是如何工作的)可以重播身份验证代码?
需要注意的重要一点:
“...此建议适用于所有类型的 OAuth 客户端,...”捕获具有处理身份验证代码请求和访问令牌交换的后端组件的 Web 应用程序。因此,我们不是在谈论以前可能使用过隐式授权类型的 Web 应用程序;我们正在讨论可以使用授权授予类型的 Web 应用程序。