我无法使用Postman实现IdentityServer4 PKCE授权。
使用在线工具创建必要的部分:
选择一个随机字符串:
1234567890
获取它的SHA-256哈希值:
c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646
对哈希进行Base64编码,以获取代码挑战:
Yzc3NWU3Yjc1N2VkZTYzMGNkMGFhMTExM2JkMTAyNjYxYWIzODgyOWNhNTJhNjQyMmFiNzgyODYyZjI2ODY0Ng==
在浏览器中导航到以下网址,填写我的凭据并从片段重定向网址中检索代码。
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记录了以下错误:
"Transformed code verifier does not match code challenge".
POST https://localhost:5000/connect/token
client_id=pkceclient
grant_type=authorization_code
code:-CesrmjPYjdLdDd5AviOZpR6GdjjkZia_ZapoJdGUZI
redirect_uri=https://jwt.ms
code_verifier=c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646
在他的博客文章中,作者使用以下代码生成部分内容。var verifier = CryptoRandom.CreateRandomKeyString(64);
var challenge = verifier.ToCodeChallenge();
但我在代码库中找不到ToCodeChallenge
方法的代码。
为什么我手动生成的挑战与验证过程中使用的不匹配,我错过了什么?
1234567890
字符串,这就是ASCII转换缺失的地方。 - jhhwilliams