Я создаю прототип IdentityServer4 для защиты нескольких сервисов с предостережением о том, что эти службы, скорее всего, не будут перенесены (в обозримом будущем) на использование идиомы промежуточного программного обеспечения OWIN для ASP.NET Core. Следовательно, я не могу использовать множество помощников промежуточного программного обеспечения, которые автоматизируют проверку JWT, просто предоставляя, среди прочего, известную конечную точку JWKS IdentityServer.Как проверить JWT с помощью JwtSecurityTokenHandler и конечной точки JWKS?
Было бы хорошо, если бы я смог восстановить это поведение, и я хотел бы использовать реализацию Microsoft JwtSecurityTokenHandler
, если это возможно. Однако я не могу понять, как использовать типы JsonWebKeySet
и JsonWebKey
, предоставляемые через конечную точку обнаружения IdentityServer, для извлечения ключей и выполнения проверки.
JwtSecurityTokenHandler
использует TokenValidationParameters
для проверки JWT, и для этих параметров требуется экземпляр одного или нескольких объектов 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);
}
Как я выполнить необходимый перевод с JsonWebKeySet
к IEnumerable<SecurityKey>
, так что проверка может произойти? Есть ли другой метод (помимо промежуточного программного обеспечения OWIN), который также будет работать с данными DiscoveryResponse
выше?
(К сожалению, документация для System.IdentityModel.Tokens.Jwt
не в курсе.)
Это фантастика - спасибо! Я забыл образцы и терялся при навигации исходного кода реализации промежуточного программного обеспечения :) –