ASP.NET Core Authentication系列(三)Cookie選項


前言

在本系列第一篇文章介紹了ASP.NET時代如何認證,並且介紹了如何通過web.config文件來配置Auth Cookie的選項。

第二篇文章介紹了如何使用Cookie認證,本文介紹幾個常見的Cookie選項及其用法。

CookieBuilder

Cookie選項設置主要在AddCookieCookieAuthenticationOptions.Cookie

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        options.Cookie.Name = "Name"; // 設置Cookie名稱
        options.Cookie.Expiration = new TimeSpan(1, 0, 0); // 有效期1小時
        options.Cookie.Domain = ".91suke.com"; // 設置Cookie域名
    });

下面我們具體看一下CookieAuthenticationOptions.Cookie的結構:

namespace Microsoft.AspNetCore.Http
{
    public class CookieBuilder
    {
        public CookieBuilder();

        public virtual string Domain { get; set; }
        
        public virtual TimeSpan? Expiration { get; set; }
        
        public virtual bool HttpOnly { get; set; }
        
        public virtual bool IsEssential { get; set; }
        
        public virtual TimeSpan? MaxAge { get; set; }
        
        public virtual string Name { get; set; }
        
        public virtual string Path { get; set; }
        
        public virtual SameSiteMode SameSite { get; set; }
        
        public virtual CookieSecurePolicy SecurePolicy { get; set; }

        public CookieOptions Build(HttpContext context);
        
        public virtual CookieOptions Build(HttpContext context, DateTimeOffset expiresFrom);
    }
}

常用的幾個選項:

  • Domain:Cookie域名,只有相同域名(或子域名)才會攜帶Cookie
  • Expiration:Cookie有效期
  • Name:Cookie名稱
  • Path:Cookie路徑,只有訪問路徑下的子路徑才會攜帶Cookie
  • HttpOnly:此屬性為true,則只有在http請求頭中會帶有此cookie的信息,而不能通過document.cookie來訪問此cookie。

通過Configuration來設置Cookie選項

在實際開發中,一般不會對選項或配置項硬編碼,因為開發環境與生產環境會有差異。這時候一般會通過配置文件來管理配置項,這樣不需要重新編譯。

appsettings.json里添加配置項:

{
  // other configuration
  
  "Cookie":{
    "Name" : "TestCookie",
    "Path": "/"
  }
  
  // other configuration
}

然后在Startup里設置:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        Configuration.GetSection("Cookie").Bind(options.Cookie);
    });

效果圖:

image


免責聲明!

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



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