[會員登入] 不使用ASP.NET Core Identity 的 Cookie 驗證 (ClaimsIdentity)

更新於 發佈於 閱讀時間約 12 分鐘

使用沒有 ASP.NET Core 身分識別的 cookie 驗證(不使用ASP.NET Core Identity的 cookie 驗證)

ASP.NET Core 3.1與 2.x ,搭配 System.Security.Claims 命名空間 的 ClaimsIdentity來做

我建議先閱讀這一篇文章,簡短有力,淺顯易懂。完成以後,再來看微軟官方說明。

(2018/8/2) Forms Authentication in .NET Core (AKA Cookie Authentication)
http://www.nogginbox.co.uk/blog/forms-authentication-in-net-core-aka-cookie-authentication

或是參考我錄製的教學影片 — https://youtu.be/eRa-hdsDfB4

https://youtu.be/eRa-hdsDfB4

微軟的文件(中文) .NET Core 2.1與 3.1差異不大。

但 3.1版的範例採用 Razor Page來示範。
https://github.com/aspnet/AspNetCore.Docs/tree/master/aspnetcore/security/authentication/cookie/samples/3.x/CookieSample

每一個檢視畫面(網頁)跟以前WebForm(.aspx)一樣,分成兩個檔案(.cshtml 與 .cshtml.cs)。

我覺得比較不好懂。所以建議參閱 .NET Core 2.1的範例。
https://github.com/aspnet/AspNetCore.Docs/tree/master/aspnetcore/security/authentication/cookie/samples/2.x/CookieSample

** 步驟如下 **

第一,打開一個 ASP.NET Core 的 MVC專案

第二,透過 Nuget安裝「Microsoft.AspNetCore.Authentication.Cookies

第三,Startup.cs裡面有些設定:
請參閱 https://github.com/aspnet/AspNetCore.Docs/blob/master/aspnetcore/security/authentication/cookie/samples/3.x/CookieSample/Startup.cs

(3–1) ConfigureServices這個區域,請加入這兩段
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
 .AddCookie();

(3–2) Configure這個區域,請加入這兩段
app.UseAuthentication(); // 這一句話需要手動加入,後面幾句是原本就有的
 app.UseAuthorization();

app.UseEndpoints(endpoints =>
 {
 endpoints.MapControllers();
 // endpoints.MapRazorPages(); // 如果您不使用 RazorPage來做,這一句可以註解掉、不用
 });

第四,HomeController控制器,您需要加入這些命名空間

using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using System.Security.Claims; // Claims會用到
using Microsoft.AspNetCore.Authorization;

(4–1) Login登入,輸入帳號、密碼。
 public IActionResult Login()
 {
 return View();
 }

[HttpPost]
 [ValidateAntiForgeryToken] 
 public ActionResult Login(db_user _User) 
 {

if (ModelState.IsValid)
 { // 入門版,先不連結DB,固定帳號密碼來做(微軟範例也是這樣)
 // 線上課程 裡會有連結資料庫,比對帳號與密碼的教材。 初學者不要急,一步一步學習。
 if (_User.UserName != “123” && _User.UserPassword != “123”)
 {
 ViewData[“ErrorMessage”] = “帳號與密碼有錯”;
 return View();
 }

#region ***** 不使用ASP.NET Core Identity的 cookie 驗證 *****
 var claims = new List<Claim> // 搭配 System.Security.Claims; 命名空間
 {
 new Claim(ClaimTypes.Name, _User.UserName),
 // new Claim(ClaimTypes.Role, “Administrator”),
 // 如果要有「群組、角色、權限」,可以加入這一段
 };

// 底下的 ** 登入 Login ** 需要下面兩個參數 (1) claimsIdentity (2) authProperties
 var claimsIdentity = new ClaimsIdentity(
 claims, CookieAuthenticationDefaults.AuthenticationScheme);

var authProperties = new AuthenticationProperties
 {
 //AllowRefresh = <bool>,
 // Refreshing the authentication session should be allowed.

//ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(10),
 // The time at which the authentication ticket expires. A 
 // value set here overrides the ExpireTimeSpan option of 
 // CookieAuthenticationOptions set with AddCookie.

//IsPersistent = true,
 // Whether the authentication session is persisted across 
 // multiple requests. When used with cookies, controls
 // whether the cookie’s lifetime is absolute (matching the
 // lifetime of the authentication ticket) or session-based.

//IssuedUtc = <DateTimeOffset>,
 // The time at which the authentication ticket was issued.

//RedirectUri = <string>
 // The full path or absolute URI to be used as an http redirect response value.
 };

// *** 登入 Login *********
 HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
 new ClaimsPrincipal(claimsIdentity),
 authProperties);
 #endregion

return Content(“<h3>恭喜您,登入成功</h3>”);
 }

// Something failed. Redisplay the form.
 return View();
 }

(4–2) LogOut 登出。微軟範例以非同步(異步)的寫法來做 — Async. Await

可以參閱這一則影片 https://youtu.be/8vcrjhaF1zE ( [ASP.NET].NET 4.5 非同步程式,從一張圖知道原來如此 (async & await) )

public async Task<IActionResult> Logout()
 {
 // 自己宣告 Microsoft.AspNetCore.Authentication.Cookies; 命名空間
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);

return View(); // 回 首頁。 return RedirectToAction(“Index”, “Home”);
 }

** 範例下載 **

我整理了一份 “PDF檔” 當作說明,也分享了這個範例
 專案名為 WebApplication2019_MVC_Core_LoginCookie

這個範例為了搭配我的MVC課程,所以經過修改。
 已經購買 ASP.NET MVC 5線上教學的朋友,可以發現跟原本範例的差異不大
 主要是上述(第四部分)的修改而已。

請由此下載 https://onedrive.live.com/?id=6F7F668080F24B20%212586&cid=6F7F668080F24B20

***************************************************

ASP.NET MVC 5 線上教學(目前已經累積 75~80小時的課程)

raw-image

課程大綱,請看 http://mis2000lab.pixnet.net/blog/post/35172535
或是 https://dotblogs.com.tw/mis2000lab/2018/08/14/aspnet_mvc_online_learning_mis2000lab

第一天 5.5小時 完整內容 免費試聽,請看

https://youtu.be/9spaHik87-A

https://youtu.be/BFkIFg1iFLo

留言
avatar-img
留言分享你的想法!
avatar-img
MIS2000 Lab. - ASP.NET 線上教學
4會員
130內容數
2025/03/25
Youtube影片網址 - https://youtu.be/bfHJBZvkSgg https://youtu.be/bfHJBZvkSgg ASP.NET MVC 第一天課程  完整內容試聽,共有三則影片,擇一試聽即可! .NET Core 8.0版 MVC(其實 MVC非常穩定,
2025/03/25
Youtube影片網址 - https://youtu.be/bfHJBZvkSgg https://youtu.be/bfHJBZvkSgg ASP.NET MVC 第一天課程  完整內容試聽,共有三則影片,擇一試聽即可! .NET Core 8.0版 MVC(其實 MVC非常穩定,
2025/03/25
問題一:Python程式,DO_A與 DO_A()這兩種寫法有何差異?都是呼叫 DO_A函數 第一種寫法: print(f”Hello”) DO_A # 注意!後面沒加上() 第二種寫法: print(f”Hello”) DO_A() 答: 在 Python 中,DO_A 和 DO_A
2025/03/25
問題一:Python程式,DO_A與 DO_A()這兩種寫法有何差異?都是呼叫 DO_A函數 第一種寫法: print(f”Hello”) DO_A # 注意!後面沒加上() 第二種寫法: print(f”Hello”) DO_A() 答: 在 Python 中,DO_A 和 DO_A
2024/12/23
適用於 .NET Framework 4.x版(非 .NET Core版) Youtube網址與功能介紹 - https://www.youtube.com/watch?v=RDdIQr3kVQM https://www.youtube.com/watch?v=RDdIQr3kVQM** 線
2024/12/23
適用於 .NET Framework 4.x版(非 .NET Core版) Youtube網址與功能介紹 - https://www.youtube.com/watch?v=RDdIQr3kVQM https://www.youtube.com/watch?v=RDdIQr3kVQM** 線
看更多
你可能也想看
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
授權碼模式連線流程 用戶端請求自己的伺服器。 伺服器發現用戶沒登入,就導向認證伺服器。 認證伺服器顯示授權頁面,等待用戶授權。 用戶確認授權後,授權頁面會向認證伺服器請求授權碼。 用戶獲取授權碼。 用戶將授權碼傳給伺服器。 伺服器拿授權碼向認證伺服器取得token。 應用註冊
Thumbnail
授權碼模式連線流程 用戶端請求自己的伺服器。 伺服器發現用戶沒登入,就導向認證伺服器。 認證伺服器顯示授權頁面,等待用戶授權。 用戶確認授權後,授權頁面會向認證伺服器請求授權碼。 用戶獲取授權碼。 用戶將授權碼傳給伺服器。 伺服器拿授權碼向認證伺服器取得token。 應用註冊
Thumbnail
深入了解使用 Cookie 實現客戶端數據存儲的技巧和最佳實踐。本文詳細解釋了 Cookie 的基本概念、限制、原生寫法,並推薦了一個實用的 JavaScript Cookie 套件,附帶實用 Demo 和原始碼。
Thumbnail
深入了解使用 Cookie 實現客戶端數據存儲的技巧和最佳實踐。本文詳細解釋了 Cookie 的基本概念、限制、原生寫法,並推薦了一個實用的 JavaScript Cookie 套件,附帶實用 Demo 和原始碼。
Thumbnail
一個APP在規劃的時候可能覺得主要功能就只有這一兩個,實作起來應該不難,卻忘了現代人的胃口已經越養越大,很多不在你預期內但對於使用者來說卻是很基本的功能;另一種是商店上架或是第三方要求的必要功能。今天我們來探討第三種必要功能:OAuth登入。
Thumbnail
一個APP在規劃的時候可能覺得主要功能就只有這一兩個,實作起來應該不難,卻忘了現代人的胃口已經越養越大,很多不在你預期內但對於使用者來說卻是很基本的功能;另一種是商店上架或是第三方要求的必要功能。今天我們來探討第三種必要功能:OAuth登入。
Thumbnail
建立middleware指令: 假設建立一個Test middleware: 新增的middleware檔案會在app/Http/Middleware路徑中。 註冊Middleware: Global Middleware: 2. Route Middleware route group用法如下:
Thumbnail
建立middleware指令: 假設建立一個Test middleware: 新增的middleware檔案會在app/Http/Middleware路徑中。 註冊Middleware: Global Middleware: 2. Route Middleware route group用法如下:
Thumbnail
Autofac為可以幫忙達成DI的套件,其運作可以參考運作描述,與如何協助ASP.NET MVC達成DI。 這次要了解如何為Dot NET Core MVC應用程式達成DI,勢必也要先了解Dot NET Core原本是如何運作的。可以參考 “ ASP.NET Core Host Outline d
Thumbnail
Autofac為可以幫忙達成DI的套件,其運作可以參考運作描述,與如何協助ASP.NET MVC達成DI。 這次要了解如何為Dot NET Core MVC應用程式達成DI,勢必也要先了解Dot NET Core原本是如何運作的。可以參考 “ ASP.NET Core Host Outline d
Thumbnail
Net Core 為一跨平台的應用開發,其此框架上可以加上許多自製服務,稱之為容器也不為過。 如果要細說明此框架,完整明瞭,可以寫出一整本厚厚的書。但如果要先瞭解框架主要的運作過程,尤其是搭配MVC控制器,是可以將此用圖解的方式將其軌跡整理出來,將其作出關係圖,當作踏入此框架的一個指引,近而未來可
Thumbnail
Net Core 為一跨平台的應用開發,其此框架上可以加上許多自製服務,稱之為容器也不為過。 如果要細說明此框架,完整明瞭,可以寫出一整本厚厚的書。但如果要先瞭解框架主要的運作過程,尤其是搭配MVC控制器,是可以將此用圖解的方式將其軌跡整理出來,將其作出關係圖,當作踏入此框架的一個指引,近而未來可
Thumbnail
如果要使用FB Login等FB外掛服務,一定要申請一組FB APP,才能夠執行後台的FB登入功能,下方為FB APP的申請流程教學,一起來觀看學習吧!
Thumbnail
如果要使用FB Login等FB外掛服務,一定要申請一組FB APP,才能夠執行後台的FB登入功能,下方為FB APP的申請流程教學,一起來觀看學習吧!
Thumbnail
本文模擬user註冊的情境來簡單演示,在Laravel中如何透過ajax來存取資料,以post request為例。 前端透過post把user資料送到controller中,並且透過model把資料塞進DB,最後回傳json response。 完整source cod
Thumbnail
本文模擬user註冊的情境來簡單演示,在Laravel中如何透過ajax來存取資料,以post request為例。 前端透過post把user資料送到controller中,並且透過model把資料塞進DB,最後回傳json response。 完整source cod
Thumbnail
適合對象:想學習 ASP.NET網頁程式(後端、MVC)、資料庫入門與應用。課程最後提供一個「線上相簿」的專案與完整解說。 從零開始學起。第一堂課(5.5小時 完整內容)免費讓您觀賞。看完了,喜歡再付錢。請來信申請。 不用擔心自己程度不好,第一天「完整」課程  看完了再說  .......
Thumbnail
適合對象:想學習 ASP.NET網頁程式(後端、MVC)、資料庫入門與應用。課程最後提供一個「線上相簿」的專案與完整解說。 從零開始學起。第一堂課(5.5小時 完整內容)免費讓您觀賞。看完了,喜歡再付錢。請來信申請。 不用擔心自己程度不好,第一天「完整」課程  看完了再說  .......
Thumbnail
影片網址 https://youtu.be/h5lrtdR9XF8 書本「ASP.NET專題實務」的讀者,如果您在下集要用到 LinqDataSource 安裝時不要忘了挑選 LINQ-to-SQL(詳見影片說明) 00:01:11 (1) 下載 Visual Studio …繼續閱讀 »
Thumbnail
影片網址 https://youtu.be/h5lrtdR9XF8 書本「ASP.NET專題實務」的讀者,如果您在下集要用到 LinqDataSource 安裝時不要忘了挑選 LINQ-to-SQL(詳見影片說明) 00:01:11 (1) 下載 Visual Studio …繼續閱讀 »
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News