API ゲートウェイの背後に API があります。API ゲートウェイは、リクエストを API に渡す前にベアラー トークンを検証します。
私の API は、asp.net core 2.0 ネイティブ認証およびクレーム ベースの承認フレームワークを使用します。JWT トークンからクレームを取得するという面倒な作業は、 のミドルウェアによって実行されますMicrosoft.AspNetCore.Authentication.JwtBearer
。
このミドルウェアは、トークンの有効期限を無視するように構成でき、ローカル公開キーを指定することもできるため、トークンを取得するためにトークン認証局に連絡する必要はありませんが、トークンの署名検証を無効にすることは可能ですか?
これにより、開発中のアドホック テストに署名されていないトークンを使用できるようになり、運用環境での二重検証 (ゲートウェイと API) を防ぐことができます。
ベストアンサー1
これを試してみてください。何度も試した後、ようやく動作するようになりました。
public TokenValidationParameters CreateTokenValidationParameters()
{
var result = new TokenValidationParameters
{
ValidateIssuer = false,
ValidIssuer = ValidIssuer,
ValidateAudience = false,
ValidAudience = ValidAudience,
ValidateIssuerSigningKey = false,
//IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(SecretKey)),
//comment this and add this line to fool the validation logic
SignatureValidator = delegate(string token, TokenValidationParameters parameters)
{
var jwt = new JwtSecurityToken(token);
return jwt;
},
RequireExpirationTime = true,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero,
};
result.RequireSignedTokens = false;
return result;
}
編集:
dotnet 8以降では、var jwt = new JwtSecurityToken(token);
SignatureValidatorを次のように置き換える必要があります。var jwt = new JsonWebToken(token);
として@トーマス前述のように、lamba も使用できます。
SignatureValidator = (token, _) => new JsonWebToken(token)
より詳しい情報:https://learn.microsoft.com/en-us/dotnet/core/compatibility/aspnet-core/8.0/securitytoken-events