我想使用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令牌创建签名?