6

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

ブログ投稿で、著者は次のコードを使用してパーツを生成しています。

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

ToCodeChallengeメソッドのリポジトリにコードが見つかりません。

手動で生成したチャレンジが検証プロセスで使用したチャレンジと一致しないのはなぜですか?何が欠けていますか?

4

3 に答える 3

15

この質問をまとめているときに、PKCE の仕様書に出くわし、次の行を見つけました。

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

私が使用したオンライン ツールでは ASCII 部分が実行されないことがわかりました。

コードでステップを実装すると、前の値を代入すると、プロセスの 2 番目のステップで検証に合格する次のようになります。

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

code_challenge: 51FaJvQFsiNdiFWIq2EMWUKeAqD47dqU_cHzJpfHl-Q

code_verifier: c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646

于 2019-11-04T04:21:32.977 に答える
1

次のリンクは、PKCE-AuthZ-Code フローを実現するのに役立ちます。

https://auth0.com/docs/api-auth/tutorials/authorization-code-grant-pkce

https://github.com/gilbert-fernandes/S256Code/blob/master/src/S256Code.java

于 2020-03-05T18:23:12.743 に答える