IdentityServer4 PKCE 错误:“转换后的代码验证程序与代码质询不匹配”

2024-03-22

我无法获得使用 Postman 工作的 IdentityServer4 PKCE 授权。

使用在线工具我创建了必要的部分:

选择一个随机字符串:

1234567890

获取其 SHA-256 哈希值:

c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646

Base64 对哈希进行编码以获得代码挑战:

Yzc3NWU3Yjc1N2VkZTYzMGNkMGFhMTExM2JkMTAyNjYxYWIzODgyOWNhNTJhNjQyMmFiNzgyODYyZjI2ODY0Ng==

在浏览器中,我导航到以下 URL,填写我的凭据并从分段的重定向 URL 中检索代码。

GET https://localhost:5000/connect/authorize
?client_id=pkceclient
&scope=openid
&response_type=code
&redirect_uri=https://jwt.ms
&state=abc
&nonce=xyz  
&code_challenge=Yzc3NWU3Yjc1N2VkZTYzMGNkMGFhMTExM2JkMTAyNjYxYWIzODgyOWNhNTJhNjQyMmFiNzgyODYyZjI2ODY0Ng==
&code_challenge_method=S256

在兑换令牌代码时,我传递了 code_verifier (SHA-256 哈希),但我的 IdentityServer 记录了以下错误:

“转换后的代码验证器与代码质询不匹配”。

POST https://localhost:5000/connect/token
client_id=pkceclient
grant_type=authorization_code
code:-CesrmjPYjdLdDd5AviOZpR6GdjjkZia_ZapoJdGUZI
redirect_uri=https://jwt.ms
code_verifier=c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646

In his 博客文章 https://leastprivilege.com/2016/02/02/pkce-support-in-identityserver-and-identitymodel/,作者使用以下代码来生成零件。

var verifier = CryptoRandom.CreateRandomKeyString(64);
var challenge = verifier.ToCodeChallenge();

但我在存储库中找不到该代码ToCodeChallenge method.

为什么我手动生成的质询与验证过程中使用的质询不匹配,我错过了什么?


在整理这个问题时,我遇到了规格 https://www.rfc-editor.org/rfc/rfc7636#section-4.2PKCE 的文档并发现以下行:

code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))

事实证明,ASCII部分不是我使用的在线工具执行的。

在代码中实现这些步骤,我得到以下结果,当替换之前的值时,通过该过程的第二步中的验证。

var codeVerifier = "c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646";
var codeVerifierBytes = Encoding.ASCII.GetBytes(codeVerifier);
var hashedBytes = codeVerifierBytes.Sha256();
var transformedCodeVerifier = Base64Url.Encode(hashedBytes);

挑战代码:51FaJvQFsiNdiFWIq2EMWUKeAqD47dqU_cHzJpfHl-Q

代码验证器:c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IdentityServer4 PKCE 错误:“转换后的代码验证程序与代码质询不匹配” 的相关文章

随机推荐