【发布时间】:2021-12-08 04:45:46
【问题描述】:
我已经使用以下代码实现了一个支持 jwt 令牌授权的 api:
services.AddAuthentication(bearerScheme)
.AddJwtBearer(bearerScheme, config =>
{
config.Authority = authority;
config.Audience = resourceId;
我还实现了一个自定义属性,它提供了进一步的基于权限的验证,以及它自己的 AuthorizationPolicyProvider 和 AuthorizationHandler。 发送有效令牌没有问题。默认的 JwtSecurityTokenHandler 在我的客户处理程序触发之前触发并验证令牌并使用令牌来验证用户权限。 然而,发送过期的令牌并没有像我预期的那样工作。 似乎发生的事情是 JwtSecurityTokenHandler 触发并拒绝令牌并出现以下错误 - 正如预期的那样
IDX10223: Lifetime validation failed. The token is expired.
我不明白为什么我的 AuthorizationHandler 然后被触发,然后使用无效的访问令牌联系另一个 api 并因为令牌无效而失败。 理想情况下,我想:
- 停止 jwt 验证并返回 401 错误,因为令牌失败,或者
- 不知何故能够在我的处理程序中获得 jwt 验证的结果并自己抛出错误
有人知道我该怎么做吗? 我很想了解为什么在身份验证失败时还要处理控制器方法上的属性,因为在身份验证失败后继续对我来说似乎很奇怪?
【问题讨论】:
-
您如何将您的身份验证方案与您的授权方案挂钩,或者您是否将此身份验证方案设置为默认身份验证方案?
-
我已将身份验证方案设置为默认值,即
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)。我没有具体的授权方案。我刚刚创建了一个继承自 DefaultAuthorizationPolicyProvider 的客户策略提供程序,并已将其注册到 DI,如下所示:services.AddSingleton<IAuthorizationPolicyProvider, SecurePolicyProvider>();
标签: c# asp.net-core authentication identityserver4