日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
Asp.netcore中使用cookie身份驗證

本文轉載自微信公眾號「UP技術控」,作者conan5566。轉載本文請聯(lián)系UP技術控公眾號。conan5566  

背景

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

配置

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

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

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

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

默認情況下,身份驗證 cookie 的 IsEssential 屬性設置為 true。當站點訪問者未同意數據收集時,允許使用身份驗證 cookie。

登錄

若要創(chuàng)建保存用戶信息的 cookie,請構造一個 ClaimsPrincipal。將對用戶信息進行序列化并將其存儲在 cookie 中。

使用任何所需的 Claim創(chuàng)建 ClaimsIdentity,并調用 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 = "數據驗證失敗" }); 
  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,并將其添加到當前響應中。如果未指定 AuthenticationScheme,則使用默認方案。

ASP.NET Core 的數據保護系統(tǒng)用于加密。對于托管在多臺計算機上的應用程序、跨應用程序或使用 web 場進行負載平衡,請將數據保護配置為使用相同的密鑰環(huán)和應用程序標識符。

注銷

若要注銷當前用戶并刪除其 cookie,請調用 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身份驗證
網站鏈接:http://www.5511xx.com/article/cosjsod.html