.AddIdentityServerAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme, (IdentityServerAuthenticationOptions options) =>
{
options.JwtBearerEvents.OnChallenge = ? // What does this by default do? I can't find its source anywhere...
};
如果有人能对此有所启发,我会非常高兴。
出于某种原因,在令牌经过身份验证后,在验证后,会调用此方法,并且出于某种原因,如果我不使用
JwtBearerChallengeContext.HandleResponse()
,我总是会返回 401 Unauthorized。
因此问题是 - 这个的默认实现是什么,这样我在实现我自己的
Challenge
(通过使用OnChallenge
属性)时就不会错过或弄乱一些东西,这将使用JwtBearerChallengeContext.HandleResponse()
?
这是我当前的实现,没有查看最初应该做什么:
.AddIdentityServerAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme, (IdentityServerAuthenticationOptions options) =>
{
options.JwtBearerEvents.OnChallenge = context =>
{
if (context.AuthenticateFailure == null && context.Error == null
&& context.ErrorDescription == null && context.ErrorUri == null)
{
context.HandleResponse();
}
return Task.CompletedTask;
};
};
我忍不住担心我可能错过了什么,或者做错了什么。
编辑:我在那里找到了this,但它并没有完全显示
eventContext
本身的作用。我只知道它是通过包的默认实现传递的IdentityServer4.AccessTokenValidation
,它不能是空方法(否则正如我们在上面的代码中看到的,身份验证将失败。)
OnChallenge
方法。
challenge
表示对用户的身份验证质询,即它需要用户交互。另请参阅这篇文章。
因此
401
返回代码不是由 OnChallenge
本身引起的,而是之前验证失败的结果。即:
access code validation failure => 401 code => OnChallenge
您的 JWT 设置中一定有某些内容导致验证失败。
另一方面,调用
HandleResponse
实际上会执行您所说想要阻止的操作,它会跳过 default implementation of this
。