我有一个Web API,它采用自定义身份验证方案来读取身份验证令牌。由于身份验证可能失败(401),原因可能有很多(令牌丢失、无效或过期),因此我想在HTTP响应中指示失败原因。例如:
令牌是在
401 令牌已过期
。令牌是在
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
看起来是保存这种自定义数据的好地方,但我不知道如何在HandleAuthenticateAsync
中创建一个AuthenticationProperties
对象,并将其附加到AuthenticateResult
对象上。有什么方法吗?