成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Asp.net core中使用cookie身份驗證

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

[[381956]]

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

背景

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

配置

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

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

AuthenticationScheme 傳遞到 AddAuthentication 設置應用程序的默認身份驗證方案。如果有多個 cookie 身份驗證實例,并且你想要使用特定方案進行授權,AuthenticationScheme 會很有用。將 AuthenticationScheme 設置為CookieAuthenticationDefaults。AuthenticationScheme為方案提供值 "cookie"。可以提供任何用于區分方案的字符串值。

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

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

登錄

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

使用任何所需的 Claim創建 ClaimsIdentity,并調用 SignInAsync 以登錄用戶:

  1. /// <summary> 
  2.         /// 
  3.         /// </summary> 
  4.         /// <param name="model"></param> 
  5.         /// <param name="returnUrl"></param> 
  6.         /// <returns></returns
  7.         [HttpPost] 
  8.         [AllowAttribute] 
  9.         [ValidateAntiForgeryToken] 
  10.         public async Task<IActionResult> 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<Claim> 
  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 創建加密的 cookie,并將其添加到當前響應中。如果未指定 AuthenticationScheme,則使用默認方案。

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

注銷

若要注銷當前用戶并刪除其 cookie,請調用 SignOutAsync:

  1. /// <summary> 
  2.         /// 
  3.         /// </summary> 
  4.         /// <returns></returns
  5.         [HttpPost] 
  6.         [ValidateAntiForgeryToken] 
  7.         public async Task<IActionResult> 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

 

責任編輯:武曉燕 來源: UP技術控
相關推薦

2009-07-29 12:55:44

ASP.NET身份驗證

2011-05-23 10:37:03

2009-07-29 16:47:40

ASP.NET表單身份

2012-06-04 09:36:50

2024-05-06 00:00:00

ASP.NET授權機制

2021-03-17 09:45:31

LazyCacheWindows

2021-02-06 21:40:13

SignalR通訊TypeScript

2021-02-02 16:19:08

Serilog日志框架

2021-03-10 09:40:43

LamarASP容器

2021-02-28 20:56:37

NCache緩存框架

2021-02-03 13:35:25

ASPweb程序

2021-01-28 22:39:35

LoggerMessa開源框架

2021-01-07 07:39:07

工具接口 Swagger

2021-03-03 22:37:16

MediatR中介者模式

2021-01-31 22:56:50

FromServiceASP

2021-02-07 17:29:04

監視文件接口

2024-05-17 08:59:02

.NET對象映射庫

2014-12-11 10:05:13

ASP.NET

2009-07-20 16:45:41

使用StringBuiASP.NET

2021-06-22 16:59:56

微軟.NETC# 軟件開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品 欧美精品 | 中文字幕亚洲一区二区三区 | 一区二区三区国产 | www.蜜桃av.com| 欧美最猛黑人xxxⅹ 粉嫩一区二区三区四区公司1 | 人人射人人草 | 黄色一级大片在线免费看产 | 欧美性受xxxx白人性爽 | 欧美一区在线看 | 日韩激情免费 | 麻豆久久| 国产资源一区二区三区 | 欧美一区二区三区在线观看 | 日日摸天天添天天添破 | 日韩小视频在线 | 波霸ol一区二区 | 亚洲精品1区2区3区 91免费看片 | 久久久久无码国产精品一区 | 99在线视频观看 | 国产中文字幕在线 | 日本福利在线 | 日韩欧美中文 | av片免费观看 | 国产成人精品一区二三区在线观看 | 精品欧美乱码久久久久久1区2区 | 911网站大全在线观看 | 亚洲欧洲精品在线 | 久久99精品久久久久久琪琪 | 亚洲自拍偷拍免费视频 | 国产毛片久久久久久久久春天 | 国产一区二区三区四区在线观看 | 国产一级片在线观看视频 | 国产亚洲精品精品国产亚洲综合 | 国产精品久久久久久模特 | 亚洲国产aⅴ成人精品无吗 欧美激情欧美激情在线五月 | 天天操网| 亚洲欧美日韩精品久久亚洲区 | 国产在线麻豆精品入口 | 日韩免费高清视频 | 日韩成人免费中文字幕 | 99久久99热这里只有精品 |