1. 程式人生 > 實用技巧 >Asp.Net Core 認證授權:Cookie-based

Asp.Net Core 認證授權:Cookie-based

介紹

Asp.NetCore Mvc 認證授權的過程,基於Cookie 的認證方式,通常用於網站做認證授權

實戰

環境:DotNetCore SDK:3.1.201
工具:VSCode

  1. 使用vscode 新建mvc專案:dotnet new mvc --name MvcAuthSample

  2. /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只需要呼叫HttpContextSignInAsync()方法,檢視方法定義可以發現需要一個scheme,這個scheme就是我們之前在Startup.cs裡面配置的CookieAuthenticationDefaults.AuthenticationScheme

Claimusing System.Security.Claims;名稱空間下
基於Claim我們可以建立一個ClaimsIdentity

8.最後訪問http://localhost:5000/Account/LoginIn後再訪問http://localhost:5000/Admin即可正常訪問實現自動登入
反之訪問http://localhost:5000/Account/LoginOut後即刪除Cookie即實現登出功能