gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:28:57 25 4
gpt4 key购买 nike

在使用 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 .

关于c# - 在 ASP.Net Core 中使用 Authorize 属性返回 HTTP 403,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35656828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com