文章目录
前言
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;
};
...