就是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
的事件蠻多的,沒有一一研究,已經滿足現在的要求,其他的等用到的時候再說吧。