Ошибка IdentityServer4 PKCE: «Проверенный преобразователь кода не соответствует запросу кода» - PullRequest
0 голосов
/ 04 ноября 2019

Я не могу получить авторизацию IdentityServer4 PKCE для работы с почтальоном.

Используя онлайн-инструменты, я создаю необходимые детали:

Выберите случайную строку:

1234567890

Получить его SHA-256 хэш:

c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646

Base64 кодирует хэш, чтобы получить код проблемы:

1018*

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

В своем блоге автор использует следующий код для генерации деталей.

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

, но я не могу найти код в репозиториях для метода ToCodeChallenge.

Почему мой вызов, созданный вручную, не совпадает с тем, который использовался в процессе проверки, чего мне не хватает?

1 Ответ

0 голосов
/ 04 ноября 2019

При составлении этого вопроса я наткнулся на документ спецификации для PKCE и обнаружил следующую строку:

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);
* * 1014 code_challenge:. 51FaJvQFsiNdiFWIq2EMWUKeAqD47dqU_cHzJpfHl-Q * * 1016 code_verifier: c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646
...