Tôi đang tạo mẫu sử dụng IdentityServer4 để bảo mật một số dịch vụ, với thông báo trước rằng các dịch vụ đó có thể sẽ không được di chuyển (trong tương lai gần) để sử dụng thành phần trung gian OWIN của ASP.NET Core. Do đó, tôi không thể tận dụng nhiều trình trợ giúp phần mềm trung gian để tự động hóa xác nhận của JWT bằng cách cung cấp điểm cuối JWKS nổi tiếng của IdentityServer, trong số những thứ khác.Làm cách nào để xác thực JWT bằng JwtSecurityTokenHandler và điểm cuối JWKS?
Sẽ thật tuyệt nếu tôi có thể tái tạo lại hành vi này và tôi muốn tận dụng triển khai JwtSecurityTokenHandler
của Microsoft nếu có thể. Tuy nhiên, tôi không thể tìm ra cách sử dụng các loại JsonWebKeySet
và JsonWebKey
được cung cấp qua điểm cuối khám phá của IdentityServer để trích xuất khóa và thực hiện xác thực.
JwtSecurityTokenHandler
sử dụng TokenValidationParameters
để xác thực JWT và các thông số đó yêu cầu một phiên bản của một hoặc nhiều đối tượng để thực hiện xác thực.
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);
}
Làm cách nào để thực hiện bản dịch cần thiết từ JsonWebKeySet
đến IEnumerable<SecurityKey>
để xác thực có thể xảy ra? Có phương pháp nào khác (ngoài phần mềm trung gian OWIN) cũng sẽ hoạt động bằng cách sử dụng dữ liệu DiscoveryResponse
ở trên không?
(Đáng buồn thay, các tài liệu hướng dẫn cho System.IdentityModel.Tokens.Jwt
không được cập nhật.)
Điều này thật tuyệt vời - cảm ơn bạn! Tôi bỏ qua các mẫu và đã bị lạc trong việc điều hướng mã nguồn của các triển khai phần mềm trung gian :) –