0
点赞
收藏
分享

微信扫一扫

ASP NET如何返回401而非302

栖桐 2022-04-29 阅读 48
asp.netc#

文章目录


前言

ASP NET MVC项目在鉴权时, 对于未登录请求会触发challenge重定向至登录界面.
然而, 在前后端分离项目中, 往往需要后端返回401而非302, 这个简单的功能实现起来却相当麻烦.
因为ASP NET MVC项目默认使用的是一个叫CookieAuthentication的中间件来实现身份认证的功能的,该中间件中会将401响应码进行特殊处理,所以导致我们无法手动返回401响应码。
我总结了两种比较简单的方法供大家参考:


1.重定向后再返回401

修改302重定向地址, 在新地址方法中直接返回401.
代码如下:

// programe.cs(Net5以下为startup.cs文件)-------------------------------
builder.Services.ConfigureApplicationCookie(options =>
{
    // Cookie settings
    options.Cookie.HttpOnly = true; 
    options.ExpireTimeSpan = TimeSpan.FromMinutes(60);

    options.LoginPath = "/api/bs/return401";	// 此处修改重定向地址
    options.AccessDeniedPath = "/Identity/Account/AccessDenied";
    options.SlidingExpiration = true;
    .........

// 新建一API方法, 直接返回401
 [HttpGet("return401")]
 [AllowAnonymous]
 public ActionResult Return401() => new UnauthorizedResult();

2.重定义CookieAuthenticationEvents类的重定向登录事件(推荐)

此方法更加简单灵活

代码如下:

// programe.cs(Net5以下为startup.cs文件)-------------------------------
builder.Services.ConfigureApplicationCookie(options =>
{
    ...

    // 未登录用户返回401, 而非重定向至登录界面
    options.Events.OnRedirectToLogin = context =>
    {
        context.Response.StatusCode = 401;
        return Task.CompletedTask;
    };
    ...

举报

相关推荐

0 条评论