日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Asp.netcore中使用cookie身份驗(yàn)證

本文轉(zhuǎn)載自微信公眾號(hào)「UP技術(shù)控」,作者conan5566。轉(zhuǎn)載本文請(qǐng)聯(lián)系UP技術(shù)控公眾號(hào)。conan5566  

背景

ASP.NET Core Identity 是一個(gè)完整的全功能身份驗(yàn)證提供程序,用于創(chuàng)建和維護(hù)登錄名。 但是, cookie 不能使用基于的身份驗(yàn)證提供程序 ASP.NET Core Identity 。

配置

在 Startup.ConfigureServices 方法中,創(chuàng)建具有 AddAuthentication 和 AddCookie 方法的身份驗(yàn)證中間件服務(wù):

 
 
  1. services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(); 
 
 
  1. app.UseAuthentication(); 

AuthenticationScheme 傳遞到 AddAuthentication 設(shè)置應(yīng)用程序的默認(rèn)身份驗(yàn)證方案。如果有多個(gè) cookie 身份驗(yàn)證實(shí)例,并且你想要使用特定方案進(jìn)行授權(quán),AuthenticationScheme 會(huì)很有用。將 AuthenticationScheme 設(shè)置為CookieAuthenticationDefaults。AuthenticationScheme為方案提供值 "cookie"??梢蕴峁┤魏斡糜趨^(qū)分方案的字符串值。

應(yīng)用的身份驗(yàn)證方案不同于應(yīng)用的 cookie 身份驗(yàn)證方案。如果未向 AddCookie提供 cookie 身份驗(yàn)證方案,則使用 CookieAuthenticationDefaults.AuthenticationScheme ("Cookie")。

默認(rèn)情況下,身份驗(yàn)證 cookie 的 IsEssential 屬性設(shè)置為 true。當(dāng)站點(diǎn)訪問(wèn)者未同意數(shù)據(jù)收集時(shí),允許使用身份驗(yàn)證 cookie。

登錄

若要?jiǎng)?chuàng)建保存用戶信息的 cookie,請(qǐng)構(gòu)造一個(gè) ClaimsPrincipal。將對(duì)用戶信息進(jìn)行序列化并將其存儲(chǔ)在 cookie 中。

使用任何所需的 Claim創(chuàng)建 ClaimsIdentity,并調(diào)用 SignInAsync 以登錄用戶:

 
 
  1. ///  
  2.         /// 
  3.         ///  
  4.         ///  
  5.         ///  
  6.         ///  
  7.         [HttpPost] 
  8.         [AllowAttribute] 
  9.         [ValidateAntiForgeryToken] 
  10.         public async Task Login(LoginModel model, string returnUrl = null) 
  11.         { 
  12.             if (!ModelState.IsValid) 
  13.             { 
  14.                 return Json(new { state = "error", message = "數(shù)據(jù)驗(yàn)證失敗" }); 
  15.             } 
  16.             string ip = GetRemoteIpAddress(); 
  17.             var r = await UserApp.SaasLoginAsync(model.Account, model.Password, ip); 
  18.             if (!string.IsNullOrEmpty(r.Error)) 
  19.             { 
  20.                 return Json(new { state = "error", message = r.Error }); 
  21.             } 
  22.             var claims = new List 
  23.                                         { 
  24.                                             new Claim(ClaimTypes.UserData, getCurrentUser(r.User, ip).ToString()), 
  25.                                         }; 
  26.             var claimsIdentity = new ClaimsIdentity( 
  27.                 claims, CookieAuthenticationDefaults.AuthenticationScheme); 
  28.             var authProperties = new AuthenticationProperties 
  29.             { 
  30.                 ExpiresUtc = DateTimeOffset.Now.AddMinutes(120) 
  31.             }; 
  32.             await HttpContext.SignInAsync( 
  33.                 CookieAuthenticationDefaults.AuthenticationScheme, 
  34.                 new ClaimsPrincipal(claimsIdentity), 
  35.                 authProperties); 
  36.             return Json(new { state = "success", message = "登錄成功。", returnUrl = RedirectToLocal(returnUrl) }); 
  37.         } 

SignInAsync 創(chuàng)建加密的 cookie,并將其添加到當(dāng)前響應(yīng)中。如果未指定 AuthenticationScheme,則使用默認(rèn)方案。

ASP.NET Core 的數(shù)據(jù)保護(hù)系統(tǒng)用于加密。對(duì)于托管在多臺(tái)計(jì)算機(jī)上的應(yīng)用程序、跨應(yīng)用程序或使用 web 場(chǎng)進(jìn)行負(fù)載平衡,請(qǐng)將數(shù)據(jù)保護(hù)配置為使用相同的密鑰環(huán)和應(yīng)用程序標(biāo)識(shí)符。

注銷(xiāo)

若要注銷(xiāo)當(dāng)前用戶并刪除其 cookie,請(qǐng)調(diào)用 SignOutAsync:

 
 
  1. ///  
  2.         /// 
  3.         ///  
  4.         ///  
  5.         [HttpPost] 
  6.         [ValidateAntiForgeryToken] 
  7.         public async Task LogOff() 
  8.         { 
  9.             if (bool.Parse(Configuration.GetSection("IsIdentity").Value)) 
  10.             { 
  11.                 return SignOut("Cookies", "oidc"); 
  12.             } 
  13.             else 
  14.             { 
  15.                 if (User.Identity.IsAuthenticated) 
  16.                 { 
  17.                     string userdata = User.Claims.FirstOrDefault(o => o.Type == ClaimTypes.UserData)?.Value; 
  18.                     await UserApp.LogOffAsync(CurrentUser.FromJson(userdata)); 
  19.                 } 
  20.                 await HttpContext.SignOutAsync( 
  21.                  CookieAuthenticationDefaults.AuthenticationScheme); 
  22.                 return RedirectToAction(actionName: nameof(Login), controllerName: "Account"); 
  23.             } 
  24.         } 

參考資料

https://docs.microsoft.com/zh-cn/aspnet/core/security/authentication/?view=aspnetcore-5.0


文章名稱:Asp.netcore中使用cookie身份驗(yàn)證
網(wǎng)站URL:http://www.dlmjj.cn/article/cosjsod.html