ASP.NET Core - 在运行时更改 JWT SecurityKey

2024-04-11

具有与此类似的配置:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(x =>
{ 
   x.TokenValidationParameters = new TokenValidationParameters
   {
      ValidateIssuer = false,
      ValidateAudience = false,

      ValidateIssuerSigningKey = true,
      IssuerSigningKey = new SymmetricSecurityKey(Convert.FromBase64String(config.JwtSecret)),

      ValidateLifetime = true,
      ClockSkew = TimeSpan.Zero
    };
 });

是否有在运行时更改 IssuerSigningKey 的正确方法?

想到的想法:

  • 保留对 TokenValidationParameters 的引用并仅替换 IssuerSigningKey

  • 扩展 SymmetricSecurityKey 并执行与上一点类似的操作

这两种方式看起来都太老套了。我认为有某种机制可以以正确的方式实现这一目标,但我只是找不到它。


我知道这是一个旧线程,但无论如何发布我的答案,因为我在搜索相同场景时偶然发现了这个线程,我认为它可能对其他人有用。

有一个代表IssuerSigningKeyResolver,在 TokenValidationParameters 中,您可以在配置其他选项时设置。每次请求身份验证时,您的委托都会被执行。您可以动态返回SecurityKey.

例如:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = false,
                ValidateAudience = false,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true,

                //ValidIssuer = jwtSettings.ValidIssuer,
                //ValidAudience = jwtSettings.ValidAudience,
                //IssuerSigningKey = issuerSigningKey,
                IssuerSigningKeyResolver = (token, secutiryToken, kid, validationParameters) =>
                {
                    SecurityKey issuerSigningKey = null;
                    // Set issuerSigningKey as per your logic.
                    // This delegate will be executed for eahc request.

                    return new List<SecurityKey>() { issuerSigningKey };
                }

            };

        });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET Core - 在运行时更改 JWT SecurityKey 的相关文章

随机推荐