0

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

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


code_verifier = base64UrlEncode(randomString(length)) 在哪里length=45
code_challenge = base64UrlEncode(sha256(code_verifier))

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

我的实现有问题吗?

编辑:我可以调试 ADFS 并查看它接收到的字符串以及与之比较的字符串吗?

4

3 回答 3

1

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

没有办法“逐步执行”ADFS。

此处的 C# 代码示例有效,可以为您提供指导。

于 2019-11-11T18:18:31.880 回答
0

只是一个想法 - 但优秀的 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% 正确的,它会给你一些比较的东西

于 2019-11-11T20:13:59.587 回答
0

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


 - 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

于 2019-11-12T08:05:00.027 回答