截至 2020 年 8 月,引用的最佳实践文档仍处于草稿中,并且正在积极更新 - 此处主要修订:https ://datatracker.ietf.org/doc/draft-ietf-oauth-security-topics/ 。Google 的 OAuth2 实施尚未将 PKCE 的“正在进行中”的建议应用于 Web 应用程序。SPA 仍被指示使用 Google 在线文档中的隐式流程:https ://developers.google.com/identity/protocols/oauth2/javascript-implicit-flow )。
PKCE 标准 ( https://www.rfc-editor.org/rfc/rfc7636 ) 详细说明它是为缓解在移动平台上发现的授权代码拦截攻击而开发的,最初建议由本地客户端实施。Google 的“移动和桌面应用程序”文档确实指导开发人员使用 PKCE 授权代码流程。使用带有 PKCE 的 Google Android、iOS 或 Windows 存储凭证类型的客户端可能会省略client_secret
(请参阅刷新令牌参数表上的注释 - 并由 Cristiano 确认)。
现在人们认识到,PKCE 消除了任何公共客户端存储客户端机密的需要,因此可用于弃用隐式流,该流总是存在在重定向 URI 中包含返回的访问和身份令牌的缺陷。https://developer.okta.com/blog/2019/05/01/is-the-oauth-implicit-flow-dead。
IETF 文件草案在第 2.1.1 节中指出,这种认可很可能会成为一个已发布的标准。
希望 Google 将更新其实现,以client_secret
在最佳实践被接受时删除对 PKCE 令牌请求的要求。与此同时,我们似乎别无选择,只能继续使用隐式流程编写 SPA。