node.js - 我每次都会生成一个新的 PKCE 挑战,还是可以存储它?
问题描述
我觉得这可能是一个愚蠢的问题,但我找不到任何人能准确地说明它。
我正在进行第三方集成,并且正在使用带有 PKCE 的 OAuth 2.0 授权授予进行身份验证。有时它可以工作,有时它会失败并显示有关 PKCE 挑战的消息。通过查看日志,我可以看到对于失败,PKCE 质询在 /authorize 调用和 /token 调用之间重新生成。
我尝试了多种方法来阻止它在这些调用之间重新产生挑战,但是,我还没有找到解决方案。由于这是第三方集成(Node 中的 Zapier 集成),因此我的选择有限且可见性有限,这增加了难度。
所以只是为了确定......我应该在每次运行身份验证步骤时生成这个 PKCE 质询,还是我可以生成一次并存储在 ENV 变量中?感觉后者是不合适的,但是因为我的想法不多了。
解决方案
PKCE 有两个方面:
应用
这会在前通道发送 code_challenge,然后在后通道发送 code_verifier - 请参阅我的博客文章中的步骤 4 和 8。可以使用在线工具来检查这些值是否正确匹配。
对于 Web 客户端,此值存储在会话存储或整个浏览器重定向的 HTTP Only cookie 中。移动客户端可以使用内存存储。这必须在每次身份验证尝试时发生。
授权服务器
AS 必须在第一个请求中存储该值,然后在第二个请求中查找它。对于任何合规的提供商来说,这应该是开箱即用的。
根据此链接,也许 Zapier 没有。也许它需要您使用没有 PKCE 但带有服务器端客户端密码的旧流程?
推荐阅读
- javascript - RangeError:在 Meteor 中创建项目时超出了最大调用堆栈大小
- python - Python 正则表达式:将字符串中的所有 url 替换为 HTML 链接,不包括 .png、.gif、.jpg、.jpeg
- mysql - SQL 选择日期不为空的最大列数
- javascript - Javascript OnScroll 性能对比
- php - php“继续”似乎不起作用
- python - python opencv:destroyallwindow不起作用
- json - Angular 6:自定义标题“授权”不起作用 Angular 6
- django - 在 Django 中选择相关
- c# - SAML2.0 加密异常(X509 证书)
- nfc - 如何更改 ACR122U / PN532 上的轮询顺序