You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Core中减小Cookie大小(类似引用模式实现)

我最近刚在ASP.NET Core Web API项目里落地了一套结合Cookie和WS-Federation的认证方案,核心逻辑是:如果本地有可用的认证Cookie,就直接用它完成身份校验;要是Cookie不存在,但用户已经在身份提供商(IdP)那边登录过,就自动向IdP请求SAML令牌来完成认证。这里把配置细节和踩过的点跟大家唠唠:

核心认证逻辑设计

这套方案的核心是优先本地Cookie, fallback到WS-Federation SAML令牌:

  • 当用户发起请求时,先检查请求中是否携带有效的认证Cookie,存在则直接解析Cookie完成身份验证
  • 若Cookie无效或不存在,自动检测用户是否已在IdP处建立会话(通常通过IdP的会话Cookie判断),如果是,就触发向IdP的SAML令牌请求流程,拿到令牌后生成本地认证Cookie,后续请求直接用Cookie
Cookie认证的关键配置

我是用System.IdentityModel.Services.SessionAuthenticationModule来处理Cookie认证的,其中最关键的一步是把它的IsReferenceMode属性设为true:

var sam = new SessionAuthenticationModule();
sam.IsReferenceMode = true;

设置这个属性后,Cookie里不会直接存储完整的身份声明数据,而是只存一个引用标识,实际的身份会话数据会保存在服务器端(默认是内存,也可以配置成分布式缓存、数据库等)。这么做的好处很明显:

  • 大幅减小Cookie的体积,避免因为Cookie过大导致的请求问题
  • 敏感的身份信息不会暴露在客户端Cookie中,提升了安全性
  • 服务器端可以更灵活地管理会话,比如主动失效某个会话
WS-Federation与Cookie的联动配置

要让两者协同工作,还需要在项目的启动配置里(比如Program.cs或者Startup.cs)做好以下几点:

  • 注册WS-Federation认证服务,指定IdP的元数据地址、回调路径、认证方案名称等
  • 配置Cookie认证的参数,比如有效期、滑动过期、Cookie名称等
  • 设置认证方案的优先级,确保Cookie认证被优先使用,示例代码大概是这样:
builder.Services.AddAuthentication(options =>
{
    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = WsFederationDefaults.AuthenticationScheme;
})
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{
    // 配置Cookie参数,比如过期时间
    options.ExpireTimeSpan = TimeSpan.FromHours(8);
    options.SlidingExpiration = true;
})
.AddWsFederation(WsFederationDefaults.AuthenticationScheme, options =>
{
    options.MetadataAddress = "https://your-idp.com/FederationMetadata/2007-06/FederationMetadata.xml";
    options.Wtrealm = "your-app-realm-uri";
});
踩过的几个坑
  • 要是用多实例部署,服务器端的会话存储不能用默认内存,得换成Redis之类的分布式缓存,不然不同实例之间拿不到会话数据
  • 要确保SessionAuthenticationModule的实例被正确初始化并集成到中间件管道里,不然Cookie的生成和解析会出问题
  • SAML令牌的验证逻辑要严谨,必须校验签名、issuer、有效期、受众(Audience)等,防止伪造的令牌

内容的提问来源于stack exchange,提问作者Drew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:27:36