加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 20:41:36 所属栏目:asp.Net 来源:网络整理
导读:我正在使用IdentityServer4来保护多个服务的原型,但需要注意的是,这些服务很可能不会被迁移(在可预见的未来)以使用ASP.NET Core的OWIN中间件习惯用法.因此,我不能利用许多中间件助手来自动验证JWT,只需提供IdentityServer的着名JWKS端点等等. 如果我能重建这
我正在使用IdentityServer4来保护多个服务的原型,但需要注意的是,这些服务很可能不会被迁移(在可预见的未来)以使用ASP.NET Core的OWIN中间件习惯用法.因此,我不能利用许多中间件助手来自动验证JWT,只需提供IdentityServer的着名JWKS端点等等.

如果我能重建这种行为会很好,我想尽可能利用微软的JwtSecurityTokenHandler实现.但是,我无法弄清楚如何利用通过IdentityServer的发现端点提供的JsonWebKeySet和JsonWebKey类型来提取密钥并执行验证.

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的文档不是最新的.)

解决方法

检查此示例:

https://github.com/IdentityServer/IdentityServer4.Samples/blob/dev/Clients/src/MvcManual/Controllers/HomeController.cs#L81

它从JWK手动检索密钥并填充验证参数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读