2

我想使用 Azure Key Vault 来存储密钥,该密钥将用于为我的 API 生成的 JwtTokens 创建签名。

对于 Jwt 令牌身份验证,我使用 Microsoft.AspNet.Authentication.JwtBearer 并像这样配置它:

app.UseJwtBearerAuthentication(options =>
            {
                options.TokenValidationParameters.IssuerSigningKey = this.tokenAuthKey;
                options.TokenValidationParameters.ValidAudience = this.tokenOptions.Audience;
                options.TokenValidationParameters.ValidIssuer = this.tokenOptions.Issuer;

                options.TokenValidationParameters.ValidateSignature = true;

                options.TokenValidationParameters.ValidateLifetime = false;

                options.TokenValidationParameters.ClockSkew = TimeSpan.FromMinutes(0);
            });

因此,如您所见,此配置需要提供带有私有部分的完整密钥(IssureSigningKey 属性)。当我的密钥不受保护地存储在文件系统中某处的 xml 文件中并且我只是在应用程序启动期间加载它时,它工作正常。但是,当我尝试将密钥存储在 Azure Key Vault (AKV) 中时出现问题。由于 AKV 只允许撤回密钥的公共部分,我正在努力让它们一起工作。

我发现 TokenValidationParameters 类具有委托属性,我可以使用它来提供我自己的验证器方法,该方法将使用 AKV 加密/解密方法来确定签名是否有效。

问题是我无法确定如何指定我自己的方法来生成 JWT 令牌的签名部分,因此 Microsoft.AspNet.Authentication.JwtBearer 的配置不需要私钥。

我的问题是:是否有可能以某种方式指定我自己的方法,在 JwtBearer 配置中或在使用 JwtSecurityTokenHandler.CreateToken 创建令牌期间为生成的 JWT 令牌创建签名?

4

0 回答 0