aspnetcore jwtbearer访问未被Authoriz标记的action时,在请求头中添加了bearertoken后,也会触发jwtbearer的OnAuthenticationFailed事件,如何避免这种情况
时间: 2024-10-12 21:07:23 浏览: 21
农行快e通授权 已调通使用中
5星 · 资源好评率100%
ASP.NET Core 中,JWT Bearer Token验证通常用于需要身份验证的控制器动作上,通过`[Authorize]`Attribute来标记。如果你发现未标记 `[Authorize]` 的Action也受到了 JWT 的验证,这通常是由于全局配置导致的,允许未经认证的API端点接受Bearer令牌。
为了避免在访问未标记 `Authorize` 的 Action 时触发 JWT Bearer 验证失败,你可以采取以下几个步骤:
1. **配置Jwt验证中间件**:确保 JWT 中间件只应用到需要验证的地方。在Startup.cs的 `ConfigureServices` 和 `Configure` 方法中,将 `AddJwtBearer` 设置为只对特定路径或控制器作用。例如:
```csharp
services.AddAuthorization(options =>
{
options.AddPolicy("UnAuthorizedActions", policy => policy.RequireAuthenticatedUser().DenyAll());
});
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers()
.RequireAuthorization("UnAuthorizedActions"); // 或者指定其他策略
endpoints.MapGet("/", () => "Unauthorized Actions are not allowed");
});
```
2. **创建自定义验证结果处理器**:如果仍然希望在未授权Action上处理 token,可以编写一个自定义的验证结果处理器(`IAuthorizationFilter`),它将在`OnAuthenticationFailed`中处理未授权情况。
3. **异常过滤器**:在未授权Action周围添加一个异常过滤器,检查是否应忽略 `JwtBearerException` 并返回适当的响应(如401未经授权)。
记得检查你的中间件顺序,确保 JWT 验证是在需要之前完成的。
阅读全文