国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET學習CORE中使用Cookie身份認證方法

2024-07-10 13:32:55
字體:
來源:轉載
供稿:網友

大家在使用ASP.NET的時候一定都用過FormsAuthentication做登錄用戶的身份認證,FormsAuthentication的核心就是Cookie,ASP.NET會將用戶名存儲在Cookie中。

現在到了ASP.NET CORE的時代,但是ASP.NET CORE中沒有FormsAuthentication這個東西,那么怎么做身份認證呢?答案是ASP.NET CORE已經為我們內置了Cookie身份認證的功能,而且使用起來非常方便,注意本文是基于ASP.NET CORE 2.0版本來闡述Cookie認證方式的。

1.從ASP.NET CORE OWIN框架中啟用Cookie身份認證功能

要在ASP.NET CORE中使用Cookie身份認證,第一步就是在項目中的OWIN框架文件Startup.cs中啟用Cookie身份認證中間件。

首先我們在Startup中的ConfigureServices方法中使用services.AddAuthentication注冊Cookie認證服務,如下代碼所示:

public void ConfigureServices(IServiceCollection services){  services.AddMvc();  //注冊Cookie認證服務  services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie();}

然后在Startup中的Configure方法中使用app.UseAuthentication啟用Cookie認證中間件(注意其中app.UseAuthentication和app.UseMvc的調用順序不能反),如下代碼所示:

public void Configure(IApplicationBuilder app, IHostingEnvironment env){  if (env.IsDevelopment())  {    app.UseDeveloperExceptionPage();    app.UseBrowserLink();  }  else  {    app.UseExceptionHandler("/Home/Error");  }  app.UseStaticFiles();  //注意app.UseAuthentication方法一定要放在下面的app.UseMvc方法前面,否者后面就算調用HttpContext.SignInAsync進行用戶登錄后,使用  //HttpContext.User還是會顯示用戶沒有登錄,并且HttpContext.User.Claims讀取不到登錄用戶的任何信息。  //這說明Asp.Net OWIN框架中MiddleWare的調用順序會對系統功能產生很大的影響,各個MiddleWare的調用順序一定不能反  app.UseAuthentication();  app.UseMvc(routes =>  {    routes.MapRoute(      name: "default",      template: "{controller=Home}/{action=Index}/{id?}");  });      }

2.登錄用戶

在ASP.NET CORE中使用Cookie認證登錄用戶的方法和傳統的FormsAuthentication不太一樣,大致步驟如下:

創建Claim類型的數組,將登錄用戶的所有信息(比如用戶名)存儲在Claim類型的字符串鍵值對中
將上面創建的Claim類型的數組傳入ClaimsIdentity中,用來構造一個ClaimsIdentity對象
將上面創建的ClaimsIdentity對象傳入ClaimsPrincipal中,用來構造一個ClaimsPrincipal對象
調用HttpContext.SignInAsync方法,傳入上面創建的ClaimsPrincipal對象,完成用戶登錄
所以我們可以看到整個ASP.NET CORE的Cookie認證登錄流程比以前ASP.NET的FormsAuthentication還是要復雜許多,畢竟以前一個FormsAuthentication.SetAuthCookie方法就搞定了。

在本文的例子中我們在項目中默認的HomeController中創建了一個Acion方法Login,來實現用戶登錄的代碼。當然這里我們實現的是最簡的Cookie登錄,下面代碼中實際上還可以設置Cookie是否持久化、Cookie多久過期、存儲登錄用戶信息的Cookie的名字是什么等,我們就不做過多介紹了,大家可以閱讀本文最后推薦的兩份官方文檔了解更多。

Login方法的代碼如下:

/// <summary>/// 該Action登錄用戶Wangdacui到Asp.Net Core/// </summary>public IActionResult Login() {	//下面的變量claims是Claim類型的數組,Claim是string類型的鍵值對,所以claims數組中可以存儲任意個和用戶有關的信息,	//不過要注意這些信息都是加密后存儲在客戶端瀏覽器cookie中的,所以最好不要存儲太多特別敏感的信息,這里我們只存儲了用戶名到claims數組,	//表示當前登錄的用戶是誰	var claims = new[] {		new Claim("UserName", "Wangdacui")	};	var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);	ClaimsPrincipal user = new ClaimsPrincipal(claimsIdentity);	//登錄用戶,相當于ASP.NET中的FormsAuthentication.SetAuthCookie	HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, user).Wait();	//可以使用HttpContext.SignInAsync方法的重載來定義持久化cookie存儲用戶認證信息,例如下面的代碼就定義了用戶登錄后60分鐘內cookie都會保留在客戶端計算機硬盤上,	//即便用戶關閉了瀏覽器,60分鐘內再次訪問站點仍然是處于登錄狀態,除非調用Logout方法注銷登錄。	/*  HttpContext.SignInAsync(  CookieAuthenticationDefaults.AuthenticationScheme,  user, new AuthenticationProperties() { IsPersistent = true, ExpiresUtc = DateTimeOffset.Now.AddMinutes(60) }).Wait();  */	return View();}

3.讀取登錄用戶信息

那么用戶登錄后怎么將登錄用戶的信息(比如用戶名)讀取出來呢?我們在HomeController的Index方法中演示了如何判斷當前用戶是否已經登錄,并且讀出登錄用戶的用戶名,Index方法的代碼如下所示:

/// <summary>/// 該Action判斷用戶是否已經登錄,如果已經登錄,那么讀取登錄用戶的用戶名/// </summary>public IActionResult Index(){  //如果HttpContext.User.Identity.IsAuthenticated為true,  //或者HttpContext.User.Claims.Count()大于0表示用戶已經登錄  if (HttpContext.User.Identity.IsAuthenticated)  {    //這里通過 HttpContext.User.Claims 可以將我們在Login這個Action中存儲到cookie中的所有    //claims鍵值對都讀出來,比如我們剛才定義的UserName的值Wangdacui就在這里讀取出來了    var userName = HttpContext.User.Claims.First().Value;  }  return View();}

4.注銷用戶

那么登錄用戶后怎么注銷登錄呢?我們在HomeController的Logout方法中演示了如何注銷登錄的用戶,代碼如下所示:

/// <summary>/// 該Action從Asp.Net Core中注銷登錄的用戶/// </summary>public IActionResult Logout(){  //注銷登錄的用戶,相當于ASP.NET中的FormsAuthentication.SignOut   HttpContext.SignOutAsync().Wait();  return View();}

前面說了實際上在ASP.NET CORE的Cookie認證中還可以設置Cookie的名字、是否持久化存儲等。

以上就是本次小編整理的全部內容,感謝你對VeVb武林網的支持。


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盐亭县| 化州市| 郧西县| 晋江市| 鞍山市| 城市| 绵竹市| 通化县| 通江县| 城步| 青浦区| 芜湖市| 漯河市| 会同县| 咸丰县| 柯坪县| 宜宾县| 吴堡县| 天门市| 广河县| 永修县| 陵水| 新蔡县| 原平市| 花莲市| 炎陵县| 招远市| 大悟县| 上蔡县| 若尔盖县| 井研县| 肇州县| 大渡口区| 正镶白旗| 德化县| 化德县| 永福县| 游戏| 吉安市| 甘孜县| 拉孜县|