前言
在本系列第一篇文章介紹了ASP.NET時代如何認證,並且介紹瞭如何通過web.config檔案來配置Auth Cookie的選項。
第二篇文章介紹瞭如何使用Cookie認證,本文介紹幾個常見的Cookie選項及其用法。
CookieBuilder
Cookie選項設定主要在AddCookie
的CookieAuthenticationOptions.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);
});
效果圖: