gpt4 book ai didi

ASP.Net/ASP.NET Core Web API 未经授权的请求返回 302 重定向响应而不是 401

转载 作者:行者123 更新时间:2023-12-04 05:30:09 25 4
gpt4 key购买 nike

在 ASP.Net/ASP.Net Core WebAPI 中,

当客户端/浏览器尝试访问用 修饰的 WebAPI 端点时[Authorized] 属性。它得到一个 302-Found 带有对登录页面的重定向响应的状态代码,而不是 401-Unauthorized 对于未经授权的请求。

注意:我注意到 Fail(AuthorizationContext context) 中的方法授权属性 过滤器将响应代码设置为 401-Unauthorized ,但最终浏览器会得到 302-Found 回复。

如何发送 401 响应而不是 302 ?

更新:使用 ASP.NET Core 更新问题

最佳答案

终于找到了解决办法。

重定向发生在 Cookie 认证 模块。默认情况下它的 LoginPath属性设置为 /Account/Login .如果设置为 PathString.Empty ,它将保持状态码为401-Unauthorized无需将其更改为 302-Found .

更改CookieAuthenticationOptions启动.cs 如下:

public void ConfigureServices(IServiceCollection services)
{
// Other configurations ...

services.Configure<CookieAuthenticationOptions>(o =>
{
o.LoginPath = PathString.Empty;
});

// ...
}
LoginPath 的 XML 文档属性(property):

The LoginPath property informs the middleware that it should change an outgoing 401 Unauthorized status code into a 302 redirection onto the given login path. The current url which generated the 401 is added to the LoginPath as a query string parameter named by the ReturnUrlParameter. Once a request to the LoginPath grants a new SignIn identity, the ReturnUrlParameter value is used to redirect the browser back to the url which caused the original unauthorized status code.

If the LoginPath is null or empty, the middleware will not look for 401 Unauthorized status codes, and it will not redirect automatically when a login occurs.



更新:正如@swdon 指出的那样, ASP.NET Core 2.x 有不同的方式来做到这一点。

这是 link 1 中接受的答案:

截至 ASP.NET Core 2.x :
services.ConfigureApplicationCookie(options =>
{
options.Events.OnRedirectToLogin = context =>
{
context.Response.StatusCode = 401;
return Task.CompletedTask;
};
});

关于ASP.Net/ASP.NET Core Web API 未经授权的请求返回 302 重定向响应而不是 401,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30411296/

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