IdentityServer 4 中 JwtBearerEvents 的 Challenge 默认实现是什么?

问题描述 投票:0回答:1
.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
,它不能是空方法(否则正如我们在上面的代码中看到的,身份验证将失败。)

c# authentication asp.net-core authorization identityserver4
1个回答
0
投票
访问令牌验证失败后调用

OnChallenge
方法。
challenge
表示对用户的身份验证质询,即它需要用户交互。另请参阅这篇文章

因此

401
返回代码不是由
OnChallenge
本身引起的,而是之前验证失败的结果。即:

access code validation failure => 401 code => OnChallenge

您的 JWT 设置中一定有某些内容导致验证失败。

另一方面,调用

HandleResponse
实际上会执行您所说想要阻止的操作,它会跳过
default implementation of this

© www.soinside.com 2019 - 2024. All rights reserved.