authトークンを読み取るカスタム認証スキームを持つWeb APIがあります。多くの理由(トークンの欠落、無効、期限切れ)で認証が失敗(401)する可能性があるため、HTTP応答に失敗の理由を示すことができます。例えば、401 Token has expired
。HandleChallengeAsyncにカスタムデータを渡す方法
トークンは、構文解析され、AuthenticationHandler<T>.HandleAuthenticateAsync
で検証されます。その方法の失敗理由をHandleChallengeAsync
に渡すにはどうすればよいですか?
protected override Task<AuthenticateResult> HandleAuthenticateAsync()
{
AuthenticateResult result = null;
var tokenResult = this.ParseToken(this.Request, out var token);
if (tokenResult == TokenResult.Normal)
{
result = AuthenticateResult.Success(this.ticketFactory.CreateAuthenticationTicket(token));
}
else
{
result = AuthenticateResult.Fail("Bad token");
// FIXME: Figure out how to populate the Properties property
//result.Properties.Items.Add(nameof(TokenResult), tokenResult.ToString());
}
return Task.FromResult(result);
}
AuthenticationProperties.Items
は、このタイプのカスタムデータを保存するのに適しています。しかし、AuthenticationProperties
オブジェクトをHandleAuthenticateAsync
の中に作成し、それをAuthenticateResult
オブジェクトに添付する方法を理解できません。方法はありますか? https://github.com/aspnet/Security/blob/dev/src/Microsoft.AspNetCore.Authentication/AuthenticationBuilder.cs#L44
インスタンスフィールドとして失敗の理由を設定することができますので、すべての要求は、ハンドラの独自のインスタンスを取得します:あなたは、ソースコードで、ここで見ることができるよう