[AspNetCore]CookieAuthentication禁用自动跳转到登录页

就是API的使用,记录一下

要干嘛?

一般情况下,配置基于Cookie的身份验证和鉴权,这样写就够了。

当用户访问被[Authorize]描述的Action的时候,若未登录,会直接跳转到 /account/login?returnUrl=xxx 页面上,在MVC中,这个实现非常好,拿来即用,基本上不用添加自己的逻辑。

services
      .AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
      .AddCookie();

如果是基于webapi的前后分离项目,当前端请求接口是,若鉴权失败,最好返回原始响应,因为大部分前端框架已经封装好了基于标准响应异常处理的逻辑。

还是上面的页面,若用户未登录,我们希望直接响应一个类似{status: 401,msg: 'xxx'}这样的结果,而不是跳转到登录页面。

怎么做?

很简单,但因为是第一次处理这样的需求,用了很长时间才找到对应的配置方式,这里备忘一下:

services
      .AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
      .AddCookie(options =>
      {
          options.Events.OnRedirectToLogin = context =>
          {
              context.Response.StatusCode = StatusCodes.Status401Unauthorized;
              return Task.CompletedTask;
          };
      });

这里option.Events的事件蛮多的,没有一一研究,已经满足现在的要求,其他的等用到的时候再说吧。


原文地址:https://www.cnblogs.com/diwu0510/p/13237344.html