いくつかのサービスを保護するためにIdentityServer4のプロトタイプを作成していますが、これらのサービスは将来的にはASP.NETコアのOWINミドルウェアイディオムを使用するように移行されない可能性があります。したがって、IdentityServerのよく知られたJWKSエンドポイントを提供するだけで、JWTの検証を自動化する多くのミドルウェアヘルパーを活用することはできません。JwtSecurityTokenHandlerとJWKSエンドポイントを使用してJWTを検証するにはどうすればよいですか?
この動作を再構築できればいいと思いますが、できるだけMicrosoftのJwtSecurityTokenHandler
の実装を利用したいと思います。しかし、IdentityServerのディスカバリ・エンドポイントで提供されたJsonWebKeySet
とJsonWebKey
のタイプを使用してキーを抽出し、検証を実行する方法を理解することはできません。
JwtSecurityTokenHandler
は、TokenValidationParameters
を使用してJWTを検証します。これらのパラメータには、検証を実行するために1つ以上のSecurityKey
オブジェクトのインスタンスが必要です。検証が発生する可能性がありますように、私はJsonWebKeySet
からIEnumerable<SecurityKey>
に必要な変換を実行するにはどうすればよい
ClaimsPrincipal ValidateJwt(string token, IdentityModel.Client.DiscoveryResponse discovery)
{
JwtSecurityToken jwt = new JwtSecurityToken(token);
TokenValidationParameters validationParameters = new TokenValidationParameters
{
ValidateAudience = true,
ValidateIssuer = true,
RequireSignedTokens = true,
ValidIssuer = "expected-issuer",
ValidAudience = "expected-audience",
IssuerSigningKeys = discovery.KeySet.Keys /* not quite */
};
JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler();
SecurityToken validatedToken;
return handler.ValidateToken(jwt, validationParameters, out validatedToken);
}
?上記のDiscoveryResponse
データを使用して動作する別の方法(OWINミドルウェアを除く)がありますか?
(残念ながら、System.IdentityModel.Tokens.Jwt
のドキュメントが最新のものではありません。)
これは素晴らしいです - ありがとう!私はサンプルを見落とし、ミドルウェアの実装のソースコードを見落としていました:) –