首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASP.Net / ASP.NET核心Web未经授权的请求返回302个重定向响应,而不是401

ASP.Net / ASP.NET核心Web未经授权的请求返回302个重定向响应,而不是401
EN

Stack Overflow用户
提问于 2015-05-23 09:54:41
回答 1查看 8.7K关注 0票数 14

在ASP.Net / ASP.Net Core WebAPI中

当客户机/浏览器试图访问使用[Authorized]属性修饰的WebAPI端点时。它获取带有重定向响应的302-Found状态代码,而不是针对未经授权的请求的401-Unauthorized

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

如何发送401响应而不是302

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-23 17:46:38

终于找到了解决办法。

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

更改CookieAuthenticationOptions in Startup.cs如下:

代码语言:javascript
运行
复制
public void ConfigureServices(IServiceCollection services)
{
    // Other configurations ...

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

    // ...
}

LoginPath属性的XML文档:

LoginPath属性通知中间件,它应该将传出的401未经授权的状态代码更改为302重定向到给定的登录路径。生成401的当前url作为由LoginPath命名的查询字符串参数添加到ReturnUrlParameter中。一旦对LoginPath的请求授予了一个新的SignIn标识,就会使用ReturnUrlParameter值将浏览器重定向回url,这会导致原始的未经授权的状态代码。 如果LoginPath为空或空,中间件将不会查找401个未经授权的状态代码,并且在登录时不会自动重定向。

更新:正如@swdon所指出的,ASP.NET Core 2.x有一种不同的方法。

以下是来自link 1的公认答案

ASP.NET Core 2.x

代码语言:javascript
运行
复制
services.ConfigureApplicationCookie(options =>
{
    options.Events.OnRedirectToLogin = context =>
    {
        context.Response.StatusCode = 401;    
        return Task.CompletedTask;
    };
});
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30411296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档