問題が発生しています手動で検証 Identity Server 4によって発行されたJWTトークン
ClientId: "CLIENT1" ClientSecret: "123456"
取得し続ける例外は次のとおりです。IDX10501:署名の検証に失敗しました。キーを一致させることができません: '[PIIはデフォルトで非表示です。 IdentityModelEventSource.csの 'ShowPII'フラグをtrueに設定して表示します。] '
誰が私が間違っているのか教えてくれますか?.
private static void ValidateJwt(string jwt, DiscoveryResponse disco)
{
var parameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
ValidIssuer = disco.Issuer,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("123456")),
ValidAudience = "CLIENT1",
//IssuerSigningKeys = keys,
// ValidateAudience = true,
// ValidateLifetime = true,
};
SecurityToken validatedToken;
var handler = new JwtSecurityTokenHandler();
handler.InboundClaimTypeMap.Clear();
try
{
var user = handler.ValidateToken(jwt, parameters, out validatedToken);
}
catch(Exception ex)
{
var error = ex.Message;
}
}
このサンプルのValidateJwt()
を確認してください。
不足しているのは、ディスカバリドキュメントから公開キーをロードすることです。
秘密鍵の長さを変更してみてください。秘密鍵が小さすぎてエンコードできないと思います。
IdentityServerはRS256を使用してJWTに署名します。これは、公開鍵を使用してJWTを検証する必要があることを意味します(これはディスカバリー文書から取得できます)。
クライアントIDとクライアントシークレットは、トークンの要求に使用されるクライアント資格情報です。それらはそれらを検証する部分を持ちません。
JWT検証にSymmetricKeyを使用しようとしています。 JWT.io でトークンを探してみてください。アルゴリズムが「RS256」の場合、SymmetricKeyは機能しません。
以下を指定しました:
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("secret"))
しかし、JwtSecurityTokenHandler
は、キーと一致しませんでした jwtヘッダー自体の一部である可能性があります 。基本的に、実際の発行者の構成と構成が一致しない[es]ことを意味します。エラーは、これが署名キーに関連していることを示唆しています。
その発行者の構成を確認し(可能な場合)、欠落している部品を見つけて、再試行してください。
jwt.io を使用して、jwtをオンラインでデバッグできます。