gpt4 book ai didi

asp.net - 如何使用 JwtSecurityTokenHandler 和 JWKS 端点验证 JWT?

转载 作者:行者123 更新时间:2023-12-04 07:18:25 27 4
gpt4 key购买 nike

我正在设计使用 IdentityServer4 来保护多个服务的原型(prototype),但需要注意的是,这些服务可能不会被迁移(在可预见的将来)以使用 ASP.NET Core 的 OWIN 中间件习语。因此,我无法通过简单地提供 IdentityServer 的著名 JWKS 端点等方式来利用许多中间件助手来自动验证 JWT。

如果我能重建这种行为就好了,我想利用微软的 JwtSecurityTokenHandler 如果可能,实现。但是,我不知道如何使用 JsonWebKeySetJsonWebKey通过 IdentityServer 的发现端点提供的类型来提取 key 并执行验证。
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 的文档不是最新的。)

最佳答案

var jwks = "{ keys: [..." // your jwks json string
var signingKeys = new JsonWebKeySet(jwks).GetSigningKeys();
然后只需将其分配给 IssuerSigningKeys您的 TokenValidationParameters 的属性(property).
如果您正在从 Web 服务读取 jwks,那么您将需要一个 http 客户端来首先读取它。

关于asp.net - 如何使用 JwtSecurityTokenHandler 和 JWKS 端点验证 JWT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40623346/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com