[會員登入] 不使用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小時的課程)

vocus|新世代的創作平台

課程大綱,請看 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
MIS2000 Lab. - ASP.NET 線上教學
4會員
133內容數
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
本文模擬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
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
Net Core 為一跨平台的應用開發,其此框架上可以加上許多自製服務,稱之為容器也不為過。 如果要細說明此框架,完整明瞭,可以寫出一整本厚厚的書。但如果要先瞭解框架主要的運作過程,尤其是搭配MVC控制器,是可以將此用圖解的方式將其軌跡整理出來,將其作出關係圖,當作踏入此框架的一個指引,近而未來可
Thumbnail
Net Core 為一跨平台的應用開發,其此框架上可以加上許多自製服務,稱之為容器也不為過。 如果要細說明此框架,完整明瞭,可以寫出一整本厚厚的書。但如果要先瞭解框架主要的運作過程,尤其是搭配MVC控制器,是可以將此用圖解的方式將其軌跡整理出來,將其作出關係圖,當作踏入此框架的一個指引,近而未來可
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
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
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
如果要使用FB Login等FB外掛服務,一定要申請一組FB APP,才能夠執行後台的FB登入功能,下方為FB APP的申請流程教學,一起來觀看學習吧!
Thumbnail
如果要使用FB Login等FB外掛服務,一定要申請一組FB APP,才能夠執行後台的FB登入功能,下方為FB APP的申請流程教學,一起來觀看學習吧!
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
一個APP在規劃的時候可能覺得主要功能就只有這一兩個,實作起來應該不難,卻忘了現代人的胃口已經越養越大,很多不在你預期內但對於使用者來說卻是很基本的功能;另一種是商店上架或是第三方要求的必要功能。今天我們來探討第三種必要功能:OAuth登入。
Thumbnail
一個APP在規劃的時候可能覺得主要功能就只有這一兩個,實作起來應該不難,卻忘了現代人的胃口已經越養越大,很多不在你預期內但對於使用者來說卻是很基本的功能;另一種是商店上架或是第三方要求的必要功能。今天我們來探討第三種必要功能:OAuth登入。
Thumbnail
授權碼模式連線流程 用戶端請求自己的伺服器。 伺服器發現用戶沒登入,就導向認證伺服器。 認證伺服器顯示授權頁面,等待用戶授權。 用戶確認授權後,授權頁面會向認證伺服器請求授權碼。 用戶獲取授權碼。 用戶將授權碼傳給伺服器。 伺服器拿授權碼向認證伺服器取得token。 應用註冊
Thumbnail
授權碼模式連線流程 用戶端請求自己的伺服器。 伺服器發現用戶沒登入,就導向認證伺服器。 認證伺服器顯示授權頁面,等待用戶授權。 用戶確認授權後,授權頁面會向認證伺服器請求授權碼。 用戶獲取授權碼。 用戶將授權碼傳給伺服器。 伺服器拿授權碼向認證伺服器取得token。 應用註冊
Thumbnail
深入了解使用 Cookie 實現客戶端數據存儲的技巧和最佳實踐。本文詳細解釋了 Cookie 的基本概念、限制、原生寫法,並推薦了一個實用的 JavaScript Cookie 套件,附帶實用 Demo 和原始碼。
Thumbnail
深入了解使用 Cookie 實現客戶端數據存儲的技巧和最佳實踐。本文詳細解釋了 Cookie 的基本概念、限制、原生寫法,並推薦了一個實用的 JavaScript Cookie 套件,附帶實用 Demo 和原始碼。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News