就是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
的事件蛮多的,没有一一研究,已经满足现在的要求,其他的等用到的时候再说吧。