私はアクセストークンを検証するためにJwtBearerMiddleware
を使用するoauth2リソースサーバーを持っています。セキュリティー・スタンプが変更された場合、アクセス・トークンが無効になることは今は控えています。このミドルウェアはセキュリティスタンプ自体を検証していないようです。jwtBearerMiddlewareのセキュリティスタンプバリデーター
私は、SecurityStampValidator
クラスがクッキー認証の妥当性を検証しているにすぎないと判断しました。
jsonのWebトークンからセキュリティースタンプを検証する必要がありますか?
それを行うには私の現在の方法は、私はJwtBearerMiddleware
を登録する際OnTokenValidated
イベントのイベントハンドラを登録することです。このイベントハンドラーでは、セキュリティーの主張をデータベースに照会して、トークンのトークンと比較するだけです。セキュリティスタンプが同じでない場合は、null
にコンテキストのTicket
とSecurityToken
を設定し、認証が必要な場合は最終的に401 httpステータスコードをスローする次のミドルウェアにスキップします。
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
...
Events = new JwtBearerEvents
{
OnTokenValidated = async (ctx) =>
{
var securityStampClaim = ctx.Ticket.Principal.Claims.FirstOrDefault(claim => claim.Type == "AspNet.Identity.SecurityStamp");
var subjectClaim = ctx.Ticket.Principal.Claims.FirstOrDefault(claim => claim.Type == OpenIdConnectConstants.Claims.Subject);
if (securityStampClaim == null || subjectClaim == null)
return;
var user = await userStore.FindByIdAsync(subjectClaim.Value, ctx.HttpContext.RequestAborted);
if (user?.SecurityStamp == securityStampClaim.Value)
return;
ctx.SecurityToken = null;
ctx.Ticket = null;
ctx.SkipToNextMiddleware();
}
}
});
これはどのように行う必要がありますか?
なぜ、asp IDがクレームの原則にセキュリティスタンプを格納するのですか? スタンプを検証するたびにデータベースにアクセスするのは効率的ではありませんか? –