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

原文地址:https://www.cnblogs.com/liang24/p/13919397.html