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

更新於 2022/03/18閱讀時間約 11 分鐘

使用沒有 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
微軟的文件(中文) .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
(3–1) ConfigureServices這個區域,請加入這兩段
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
 .AddCookie();


(3–2) Configure這個區域,請加入這兩段
app.UseAuthentication(); // 這一句話需要手動加入,後面幾句是原本就有的
 app.UseAutho
rization();
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
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線上教學的朋友,可以發現跟原本範例的差異不大
 主要是上述(第四部分)的修改而已。

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

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

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

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

為什麼會看到廣告
    avatar-img
    4會員
    120內容數
    留言0
    查看全部
    avatar-img
    發表第一個留言支持創作者!
    兩千MIS的沙龍 的其他內容
    適合對象:想學習 ASP.NET網頁程式(後端、MVC)、資料庫入門與應用。課程最後提供一個「線上相簿」的專案與完整解說。 從零開始學起。第一堂課(5.5小時 完整內容)免費讓您觀賞。看完了,喜歡再付錢。請來信申請。 不用擔心自己程度不好,第一天「完整」課程  看完了再說  .......
    ASP.NET (Web Form) 遠距教學、歡迎在家自修、學習 ***本課程是「事先錄影」的影片。繳費後就能觀賞!*** 繳費後,看完第一天課程  。如不滿意,無需理由,全額退費!
    透過Win10內部的設定(軟體調整 / 校正顯示器) ………………………………………………………….. Notebook 筆記型電腦、筆記本、本本 沒有一般螢幕可以調整「對比」的按鈕, 所以要透過 Win10內部的設定(軟體調整 / 校正顯示器) 我也擔心自己忘記,所以記錄下來。圖片如下。
    P.S. 我也不知道要放什麼圖片,就選一個「發大財」的 :-P 常有朋友問起,我簡單說一下: **「寫書」花費的時間大約要三個月(這算是全力在寫,很快的!)加上編輯、審稿、出版(約兩個月時間) 總共要花五個月。 **「線上影片」錄製的時間如果是一天,後製作的時間要乘以三倍。 不過 ……
    ASP.NET專題實務,上下兩集,書本範例下載 第零章。初學者 從零開始。  [Youtube影片] 安裝 VS 2017/ 2019有幾個地方要注意,請看 https://vimeo.com/330999680 ASP.NET專題實務 / 博碩出版 上下兩集的範例,由此下載 == 博客來 ==
    ASP.NET專題實務(I),博碩出版 ** IIS 與 檔案上傳 (FileUpload)的安全設定 ** 18–13–1 要求篩選(Request Filtering) 18–13–2 限制執行 以上來自 — ASP.NET 專題實務 (I) / 博碩出版
    適合對象:想學習 ASP.NET網頁程式(後端、MVC)、資料庫入門與應用。課程最後提供一個「線上相簿」的專案與完整解說。 從零開始學起。第一堂課(5.5小時 完整內容)免費讓您觀賞。看完了,喜歡再付錢。請來信申請。 不用擔心自己程度不好,第一天「完整」課程  看完了再說  .......
    ASP.NET (Web Form) 遠距教學、歡迎在家自修、學習 ***本課程是「事先錄影」的影片。繳費後就能觀賞!*** 繳費後,看完第一天課程  。如不滿意,無需理由,全額退費!
    透過Win10內部的設定(軟體調整 / 校正顯示器) ………………………………………………………….. Notebook 筆記型電腦、筆記本、本本 沒有一般螢幕可以調整「對比」的按鈕, 所以要透過 Win10內部的設定(軟體調整 / 校正顯示器) 我也擔心自己忘記,所以記錄下來。圖片如下。
    P.S. 我也不知道要放什麼圖片,就選一個「發大財」的 :-P 常有朋友問起,我簡單說一下: **「寫書」花費的時間大約要三個月(這算是全力在寫,很快的!)加上編輯、審稿、出版(約兩個月時間) 總共要花五個月。 **「線上影片」錄製的時間如果是一天,後製作的時間要乘以三倍。 不過 ……
    ASP.NET專題實務,上下兩集,書本範例下載 第零章。初學者 從零開始。  [Youtube影片] 安裝 VS 2017/ 2019有幾個地方要注意,請看 https://vimeo.com/330999680 ASP.NET專題實務 / 博碩出版 上下兩集的範例,由此下載 == 博客來 ==
    ASP.NET專題實務(I),博碩出版 ** IIS 與 檔案上傳 (FileUpload)的安全設定 ** 18–13–1 要求篩選(Request Filtering) 18–13–2 限制執行 以上來自 — ASP.NET 專題實務 (I) / 博碩出版
    你可能也想看
    Google News 追蹤
    Thumbnail
    *合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
    Thumbnail
    *合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科