最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.NET學(xué)習(xí)CORE中使用Cookie身份認(rèn)證方法

 更新時(shí)間:2018年01月26日 11:27:01   作者:PowerCoder  
本篇文章主要給大家詳細(xì)分析了ASP.NET學(xué)習(xí)CORE中使用Cookie身份認(rèn)證方法以及相關(guān)的實(shí)例代碼,有需要的朋友參考下吧。

大家在使用ASP.NET的時(shí)候一定都用過FormsAuthentication做登錄用戶的身份認(rèn)證,F(xiàn)ormsAuthentication的核心就是Cookie,ASP.NET會(huì)將用戶名存儲(chǔ)在Cookie中。

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

1.從ASP.NET CORE OWIN框架中啟用Cookie身份認(rèn)證功能

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

首先我們?cè)赟tartup中的ConfigureServices方法中使用services.AddAuthentication注冊(cè)Cookie認(rèn)證服務(wù),如下代碼所示:

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

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

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方法前面,否者后面就算調(diào)用HttpContext.SignInAsync進(jìn)行用戶登錄后,使用
  //HttpContext.User還是會(huì)顯示用戶沒有登錄,并且HttpContext.User.Claims讀取不到登錄用戶的任何信息。
  //這說明Asp.Net OWIN框架中MiddleWare的調(diào)用順序會(huì)對(duì)系統(tǒng)功能產(chǎn)生很大的影響,各個(gè)MiddleWare的調(diào)用順序一定不能反
  app.UseAuthentication();
  app.UseMvc(routes =>
  {
    routes.MapRoute(
      name: "default",
      template: "{controller=Home}/{action=Index}/{id?}");
  });      
}

2.登錄用戶

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

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

在本文的例子中我們?cè)陧?xiàng)目中默認(rèn)的HomeController中創(chuàng)建了一個(gè)Acion方法Login,來實(shí)現(xiàn)用戶登錄的代碼。當(dāng)然這里我們實(shí)現(xiàn)的是最簡(jiǎn)的Cookie登錄,下面代碼中實(shí)際上還可以設(shè)置Cookie是否持久化、Cookie多久過期、存儲(chǔ)登錄用戶信息的Cookie的名字是什么等,我們就不做過多介紹了,大家可以閱讀本文最后推薦的兩份官方文檔了解更多。

Login方法的代碼如下:

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

3.讀取登錄用戶信息

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

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

4.注銷用戶

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

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

前面說了實(shí)際上在ASP.NET CORE的Cookie認(rèn)證中還可以設(shè)置Cookie的名字、是否持久化存儲(chǔ)等。

以上就是本次小編整理的全部?jī)?nèi)容,感謝你對(duì)腳本之家的支持。

相關(guān)文章

最新評(píng)論

民丰县| 朔州市| 临潭县| 墨江| 田东县| 隆德县| 句容市| 长兴县| 张家口市| 宜兴市| 西城区| 琼中| 乌兰县| 顺平县| 怀柔区| 赤水市| 肃宁县| 海口市| 左云县| 贞丰县| 富顺县| 花垣县| 恩施市| 崇州市| 巍山| 武穴市| 大方县| 深泽县| 平潭县| 微博| 白山市| 福鼎市| 南涧| 驻马店市| 石城县| 旅游| 财经| 富蕴县| 乌兰浩特市| 霸州市| 连江县|