Angular 使用带有 PKCE ( ADFS ) 代码验证错误的 OAuth2 代码流的应用

Angular app using OAuth2 Code Flow with PKCE ( ADFS ) code validation error

我正在尝试在具有 ADFS 2019 的 Angular 客户端中实施 code flow with pkce。我目前收到错误 Unable to validate code_verifier.

我正在使用以下算法生成 code_verifiercode_challenge


code_verifier = base64UrlEncode(randomString(length)) 其中 length=45
code_challenge = base64UrlEncode(sha256(code_verifier))

我已经检查了我发送的 code_verifier 以及我从 ADFS 收到的 code,它与构建登录名 url 时生成的匹配。

我的实现有问题吗?

编辑:我能以某种方式调试 ADFS 并查看它接收到的字符串和它与之比较的字符串吗?

是 - 您可以查看 ADFS 中的事件日志,看看是否记录了任何错误。

无法"step-through" ADFS。

C# 代码示例 here 有效并且可能会指导您。

只是一个想法 - 但出色的 oidc 客户端库也许能够为您处理这个问题。

一个选项可能是将我基于标准的 SPA 示例(以易于调试的简单程序方式编码)重新指向您的 ADFS 基础 url: https://authguidance.com/2017/09/24/basicspa-overview/

这应该只涉及更新配置文件中的 OAuth 设置: https://github.com/gary-archer/authguidance.websample1/blob/master/spa/spa.config.json

不确定它是否有帮助 - 但我知道我的 SPA 中的 PKCE 处理是 100% 正确的,它会给你一些可以比较的东西

我已通过进行以下更改使其正常工作:


 - Skipped encoding the code_verifier
 - Changed the hashing steps for the code_challenge. 
I was turning the ArrayBuffer into an Array, the Array into a string and base64UrlEncode the string.
What I changed here was that I directly encoded the ArrayBuffer and skipped the conversions. 

我使用一个库将所有这些功能引入 JS https://www.npmjs.com/package/@waiting/base64/v/4.2.4