asp.net core 3.1 cookie httpOnly 登錄驗證


region set-cookie to ie

 

 

1.startup.cs ConfigureServices 添加

//注冊Cookie認證服務

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, option =>
{
option.AccessDeniedPath = "/Login"; //當用戶嘗試訪問資源但沒有通過任何授權策略時,這是請求會重定向的相對路徑資源
option.LoginPath = "/Login/";
option.Cookie.Name = "token";//設置存儲用戶登錄信息(用戶Token信息)的Cookie名稱
option.Cookie.HttpOnly = true;//設置存儲用戶登錄信息(用戶Token信息)的Cookie,無法通過客戶端瀏覽器腳本(如JavaScript等)訪問到
//option.Cookie.SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.Always;//設置存儲用戶登錄信息(用戶Token信息)的Cookie,只會通過HTTPS協議傳遞,如果是HTTP協議,Cookie不會被發送。注意,option.Cookie.SecurePolicy屬性的默認值是Microsoft.AspNetCore.Http.CookieSecurePolicy.SameAsRequest
});

 

2.startup.cs Configure添加

//要放在app.UseRouting、app.UseCors之后,並且在app.UseEndpoints之前
app.UseAuthentication();
app.UseAuthorization();

 

3.login 方法: 

//下面的變量claims是Claim類型的數組,Claim是string類型的鍵值對,所以claims數組中可以存儲任意個和用戶有關的信息,
//不過要注意這些信息都是加密后存儲在客戶端瀏覽器cookie中的,所以最好不要存儲太多特別敏感的信息,這里我們只存儲了用戶名到claims數組,
//表示當前登錄的用戶是誰
//var claims = new[] { new Claim("token", UserName) };
//var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
//ClaimsPrincipal user = new ClaimsPrincipal(claimsIdentity);

//Task.Run(async () =>
//{
// //登錄用戶,相當於ASP.NET中的FormsAuthentication.SetAuthCookie
// await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, user);

// //可以使用HttpContext.SignInAsync方法的重載來定義持久化cookie存儲用戶認證信息,例如下面的代碼就定義了用戶登錄后60分鍾內cookie都會保留在客戶端計算機硬盤上,
// //即便用戶關閉了瀏覽器,60分鍾內再次訪問站點仍然是處於登錄狀態,除非調用Logout方法注銷登錄。
// //注意其中的AllowRefresh屬性,如果AllowRefresh為true,表示如果用戶登錄后在超過50%的ExpiresUtc時間間隔內又訪問了站點,就延長用戶的登錄時間(其實就是延長cookie在客戶端計算機硬盤上的保留時間),
// //例如本例中我們下面設置了ExpiresUtc屬性為60分鍾后,那么當用戶登錄后在大於30分鍾且小於60分鍾內訪問了站點,那么就將用戶登錄狀態再延長到當前時間后的60分鍾。但是用戶在登錄后的30分鍾內訪問站點是不會延長登錄時間的,
// //因為ASP.NET Core有個硬性要求,是用戶在超過50%的ExpiresUtc時間間隔內又訪問了站點,才延長用戶的登錄時間。
// //如果AllowRefresh為false,表示用戶登錄后60分鍾內不管有沒有訪問站點,只要60分鍾到了,立馬就處於非登錄狀態(不延長cookie在客戶端計算機硬盤上的保留時間,60分鍾到了客戶端計算機就自動刪除cookie)
// /*
// await HttpContext.SignInAsync(
// CookieAuthenticationDefaults.AuthenticationScheme,
// user, new AuthenticationProperties()
// {
// IsPersistent = true,
// ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(60),
// AllowRefresh = true
// });
// */

//}).Wait();

 

 

4. 驗證是否登錄
// 如果HttpContext.User.Identity.IsAuthenticated為true,

//if (HttpContext.User.Identity.IsAuthenticated)   //HttpContext.User.Identities.Count()>0)
//{
// HttpContext.AuthenticateAsync();
// //這里通過 HttpContext.User.Claims 可以將我們在Login這個Action中存儲到cookie中的所有
// //claims鍵值對都讀出來,比如我們剛才定義的UserName的值Wangdacui就在這里讀取出來了
// var userName = HttpContext.User.Claims.First().Value;
// if (!string.IsNullOrEmpty(userName))
// {
// bool IsLogin = true;
// }
//}
//string str = Request.HttpContext.Connection.LocalIpAddress.MapToIPv4().ToString() + ":" + Request.HttpContext.Connection.LocalPort;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM