首页 > 解决方案 > 我每次都会生成一个新的 PKCE 挑战,还是可以存储它?

问题描述

我觉得这可能是一个愚蠢的问题,但我找不到任何人能准确地说明它。

我正在进行第三方集成,并且正在使用带有 PKCE 的 OAuth 2.0 授权授予进行身份验证。有时它可以工作,有时它会失败并显示有关 PKCE 挑战的消息。通过查看日志,我可以看到对于失败,PKCE 质询在 /authorize 调用和 /token 调用之间重新生成。

我尝试了多种方法来阻止它在这些调用之间重新产生挑战,但是,我还没有找到解决方案。由于这是第三方集成(Node 中的 Zapier 集成),因此我的选择有限且可见性有限,这增加了难度。

所以只是为了确定......我应该在每次运行身份验证步骤时生成这个 PKCE 质询,还是我可以生成一次并存储在 ENV 变量中?感觉后者是不合适的,但是因为我的想法不多了。

标签: node.jsoauth-2.0zapierpkce

解决方案


PKCE 有两个方面:

应用

这会在前通道发送 code_challenge,然后在后通道发送 code_verifier - 请参阅我的博客文章中的步骤 4 和 8。可以使用在线工具来检查这些值是否正确匹配。

对于 Web 客户端,此值存储在会话存储或整个浏览器重定向的 HTTP Only cookie 中。移动客户端可以使用内存存储。这必须在每次身份验证尝试时发生。

授权服务器

AS 必须在第一个请求中存储该值,然后在第二个请求中查找它。对于任何合规的提供商来说,这应该是开箱即用的。

根据此链接,也许 Zapier 没有。也许它需要您使用没有 PKCE 但带有服务器端客户端密码的旧流程?


推荐阅读