中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-08-09 10:25:39 來源:億速云 閱讀:106 作者:小新 欄目:開發技術

小編給大家分享一下ASP.NET學習CORE中如何使用Cookie身份認證方法,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

大家在使用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的名字、是否持久化存儲等。

看完了這篇文章,相信你對“ASP.NET學習CORE中如何使用Cookie身份認證方法”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜兰市| 梅州市| 新巴尔虎左旗| 石家庄市| 汽车| 平陆县| 蓝田县| 曲松县| 嘉黎县| 嘉兴市| 怀仁县| 绥江县| 谷城县| 七台河市| 永平县| 衢州市| 美姑县| 崇明县| 旺苍县| 新营市| 芜湖市| 瑞金市| 桐柏县| 佛山市| 大关县| 澳门| 安宁市| 和林格尔县| 大悟县| 景德镇市| 临澧县| 余干县| 佳木斯市| 大同市| 长武县| 麻江县| 万年县| 林西县| 昭通市| 临西县| 马山县|