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 トークンの署名を作成する独自のメソッドを何らかの形で指定することは可能ですか?