Skip to main content
 首页 » 编程设计

c#之在 ASP.Net Core 中使用 Authorize 属性返回 HTTP 403

2025年02月15日20cloudgamer

在使用 ASP.Net WebAPI 时,我曾经有一个 custom Authorize attribute我会使用返回一个 HTTP 403401视情况而定。例如如果用户未通过身份验证,则返回 401 ;如果用户已通过身份验证但没有适当的权限,则返回 403 . See here for more discussion在那。

现在看来,在新的 ASP.Net Core 中,它们 don't want you overriding the Authorize attribute不再支持基于策略的方法。然而,Core MVC 似乎遭受了与它的前辈相同的“只返回 401 对于所有身份验证错误”的方法。

如何覆盖框架以获得我想要的行为?

请您参考如下方法:

打开 issue here 后,看来这实际上应该工作......有点。

在您的 Startup.Configure , 如果您只是调用 app.UseMvc()并且不要注册任何其他中间件,你会得到401对于任何与身份验证相关的错误(未通过身份验证,已通过身份验证但没有权限)。

但是,如果您注册了支持它的身份验证中间件之一,您将正确获得 401对于未经身份验证和 403没有权限。对我来说,我使用了 JwtBearerMiddleware允许通过 JSON Web Token 进行身份验证.关键部分是设置AutomaticChallenge创建中间件时的选项:

Startup.Configure :

app.UseJwtBearerAuthentication(new JwtBearerOptions 
{ 
    AutomaticAuthenticate = true, 
    AutomaticChallenge = true 
}); 
app.UseMvc(); 
AutomaticAuthenticate将设置 ClaimsPrincipal自动访问 User在 Controller 中。 AutomaticChallenge允许 auth 中间件在 auth 错误发生时修改响应(在这种情况下设置 401403 适当)。

如果您有自己的身份验证方案要实现,您将从 AuthenticationMiddleware 继承。和 AuthenticationHandler类似于 JWT implementation works .