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


配置

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

services.AddAuthentication(Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationDefaults.AuthenticationScheme)
            .AddCookie(options =>
            {
                // Cookie settings
                options.Cookie.HttpOnly = true;
                options.ExpireTimeSpan = TimeSpan.FromMinutes(20);

                options.LoginPath = "/Account/Login";
                options.AccessDeniedPath = "/Account/AccessDenied";
                options.SlidingExpiration = true;
            });

 

AuthenticationScheme 傳遞到 AddAuthentication 設置應用程序的默認身份驗證方案。 如果有多個 cookie 身份驗證實例,並且你想要使用特定方案進行授權,AuthenticationScheme 會很有用。 將 AuthenticationScheme 設置為CookieAuthenticationDefaults。 AuthenticationScheme為方案提供值 "cookie"。 可以提供任何用於區分方案的字符串值。
應用的身份驗證方案不同於應用的 cookie 身份驗證方案。 如果未向 AddCookie提供 cookie 身份驗證方案,則使用 CookieAuthenticationDefaults.AuthenticationScheme ("Cookie")。
默認情況下,身份驗證 cookie 的 IsEssential 屬性設置為 true。 當站點訪問者未同意數據收集時,允許使用身份驗證 cookie。 


在 Startup.Configure中,調用 UseAuthentication 和 UseAuthorization 設置 HttpContext.User 屬性,並為請求運行授權中間件。 調用 UseEndpoints之前調用 UseAuthentication 和 UseAuthorization 方法:

app.UseCookiePolicy();
app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints
=> {   endpoints.MapControllers();   endpoints.MapRazorPages(); });

 

登錄

若要創建保存用戶信息的 cookie,請構造一個 ClaimsPrincipal。 將對用戶信息進行序列化並將其存儲在 cookie 中。
使用任何所需的 Claim創建 ClaimsIdentity,並調用 SignInAsync 以登錄用戶:

var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, user.Email),
new Claim("FullName", user.FullName),
new Claim(ClaimTypes.Role, "Administrator"),
};

var claimsIdentity = new ClaimsIdentity(
claims, CookieAuthenticationDefaults.AuthenticationScheme);

var authProperties = new AuthenticationProperties
{
//AllowRefresh = <bool>,
// Refreshing the authentication session should be allowed.

//ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(10),
// The time at which the authentication ticket expires. A 
// value set here overrides the ExpireTimeSpan option of 
// CookieAuthenticationOptions set with AddCookie.

//IsPersistent = true,
// Whether the authentication session is persisted across 
// multiple requests. When used with cookies, controls
// whether the cookie's lifetime is absolute (matching the
// lifetime of the authentication ticket) or session-based.

//IssuedUtc = <DateTimeOffset>,
// The time at which the authentication ticket was issued.

//RedirectUri = <string>
// The full path or absolute URI to be used as an http 
// redirect response value.
};

await HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme, 
new ClaimsPrincipal(claimsIdentity), 
authProperties);

 

SignInAsync 創建加密的 cookie,並將其添加到當前響應中。 如果未指定 AuthenticationScheme,則使用默認方案。
ASP.NET Core 的數據保護系統用於加密。 對於托管在多台計算機上的應用程序、跨應用程序或使用 web 場進行負載平衡,請將數據保護配置為使用相同的密鑰環和應用程序標識符。

 

注銷

 

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

await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);

 

如果 CookieAuthenticationDefaults.AuthenticationScheme (或 "Cookie")不用作方案(例如 "ContosoCookie"),請提供配置身份驗證提供程序時所使用的方案。 否則,將使用默認方案。

 


免責聲明!

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



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