Asp.Net Core 認證授權:Cookie-based
介紹
Asp.NetCore Mvc 認證授權的過程,基於Cookie 的認證方式,通常用於網站做認證授權
實戰
環境:DotNetCore SDK:3.1.201
工具:VSCode
-
使用vscode 新建mvc專案:
dotnet new mvc --name MvcAuthSample
-
在
/Controllers
資料夾下新建AdminController
和對應的檢視
3.在AdminController
下引入using Microsoft.AspNetCore.Authorization;
名稱空間並編寫對應的方法和在控制器上打上標籤[Authorize]
4.在Startup.cs
首先引入授權認證名稱空間
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(options=>{ options.LoginPath="/Account/LoginIn";//自定義配置登入的url,預設Account/Login options.LogoutPath = "/Account/LoginOut"; }); services.AddControllersWithViews(); }
5.新增認證中介軟體:app.UseAuthentication();
,此處注意要在mvc之前新增否則不會生效
6.dotnet run
訪問http://localhost:5000/Admin/Index
會重定向到http://localhost:5000/Account/LoginIn?ReturnUrl=%2FAdmin%2FIndex
此時的重定向的地址是我們在ConfigureServices
中自己配置的,預設地址是Account/Login
7.接下來我們新建AccountController
實現模擬登入
AccountController
裡面只有兩個方法:
LoginIn()
和LoginOut()
7.1匯入名稱空間:
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
此處不是讓使用者去輸入使用者名稱和密碼登入,只要訪問這個頁面就會去建立Cookie,建立Cookie只需要呼叫HttpContext
的SignInAsync()
方法,檢視方法定義可以發現需要一個scheme,這個scheme就是我們之前在Startup.cs
裡面配置的CookieAuthenticationDefaults.AuthenticationScheme
Claim
在using System.Security.Claims;
名稱空間下
基於Claim
我們可以建立一個ClaimsIdentity
8.最後訪問http://localhost:5000/Account/LoginIn
後再訪問http://localhost:5000/Admin
即可正常訪問實現自動登入
反之訪問http://localhost:5000/Account/LoginOut
後即刪除Cookie即實現登出功能