用mvc來實作以下Cookie-Base的認證和授權的方式
建立一個web MVC的項目
在我的電腦的路徑:D:\MyDemos\jesse
Ctrl+滑鼠右鍵打開 CMD窗體建立一個項目
dotnet new mvc --name MvcCookieAuthSample

預設帶這Home的Controller
建立AdminController,把HomeController的内容指派過去,進行修改,隻保留一個Index的Action就可以了。
views下面建立Admin檔案夾在下面建立Index.cshtml
指派About.cshtml的内容進去簡單修改一下
dotnet run 執行
打開位址通路admin
https://localhost:5001/admin
在admin加上驗證
注意這裡的命名空間是:
引入Cookies的命名空間在VSCode中會報錯。注意這裡的命名空間的名稱
AddAuthentication裡面要傳一個Scheme
CookieAuthenticationDefaults.AuthenticationScheme實際上是一個字元串的常量
這個常量實際上就是常量:Cookies
把Cookie添加進來。
然後我們要在mvc之前,把這個middleware也添加進來。
否則我們的認證授權是不會生效的
dotnet run 運作程式
這個時候我們打開位址:https://localhost:5001/admin/index
就會自動給我們跳轉到:
https://localhost:5001/Account/Login?ReturnUrl=%2Fadmin%2Findex
也就是我們現在沒法通路admin這個頁面了。
接下來我們來模拟登入的過程
Controllers下建立:
AccountController.cs
SignInAsync第二個參數需呀傳入CliamsPrincipal
Cliams在這個命名空間下面:
using System.Security.Claims;
建立Claim的List
基于Cliams建立了Identity。ClaimsIdentity的第二個參數一定要給個authenticationType,否則我們的登陸就沒有辦法識别
在做一個LogOut的Action
修改為傳回為ok,這樣就是api了
dotnet watch run
我們先通路以下admin頁面 ,通路不到
會自動跳轉到:
https://localhost:5001/Account/Login?ReturnUrl=%2Fadmin
我們直接修改連結位址為:
https://localhost:5001/Account/Login
去通路,這樣就實作了登陸了。
然後我們再次通路admin頁面就可以通路到了
為了防止和預設的跳轉的頁面的url相同了。我們把Login修改為MakeLogin
我們先通路:退出
https://localhost:5001/Account/loginout
然後在通路admin
這樣就通路不到了。
我們通路:執行登陸的操作
https://localhost:5001/Account/MakeLogin
會把我們的cookie設定好
再次通路admin的頁面,這樣就能成功通路到了。
https://localhost:5001/Admin
退出的操作
https://localhost:5001/Account/Loginout
修改預設跳轉的頁面位址:
通路:https://localhost:5001/admin
會自動跳轉到:這樣就實作了自動登陸
https://localhost:5001/Account/MakeLogin?ReturnUrl=%2Fadmin
我們再次通路admin就可以成功登陸了。