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

使用Identity Server 4实现SSO时不同客户端Cookie有效期配置问题

核心概念澄清

首先需要明确两类Cookie的职责完全独立,不存在绑定关系:

  • IDS4端的idsrv Cookie:统一身份源的全局会话凭证,仅用于判断用户是否已经在身份认证平台完成登录,避免重复输入账号密码
  • 各MVC客户端本地的Cookie:客户端自身的会话凭证,有效期、滑动过期规则完全由客户端自主配置,和IDS4的Cookie设置没有强制关联

IDS4 Cookie的合理配置方案

IDS4的Cookie有效期建议设置为大于等于所有客户端的最大有效时长,你的场景中客户端最长有效期为40分钟,推荐将IDS4的Cookie有效期设置为2小时,可根据整体安全要求选择开启/关闭滑动过期。该配置仅用于保证用户在正常访问业务系统的周期内,跨客户端跳转时无需重复登录,不会影响任何客户端的本地会话规则。

客户端2 10分钟有效期要求的解决方案

你担心的「IDS4 Cookie为40分钟无法满足客户端2的10分钟要求」属于典型的概念混淆,两种常见场景的处理方式如下:

场景1:仅要求客户端2本地会话10分钟滑动过期,允许跳转IDS4时无感知重签

直接在客户端2的认证配置中单独设置本地Cookie规则即可,完全不需要调整IDS4的配置,示例代码如下:

services.AddAuthentication(options =>
{
    options.DefaultScheme = "Cookies";
    options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies", options =>
{
    // 单独配置客户端2的10分钟有效期+滑动过期规则
    options.ExpireTimeSpan = TimeSpan.FromMinutes(10);
    options.SlidingExpiration = true;
})
.AddOpenIdConnect("oidc", options =>
{
    options.Authority = "你的IDS4服务地址";
    options.ClientId = "客户端2的唯一标识";
    // 其余OIDC配置(ClientSecret、Scope、回调地址等)省略
});

该场景下,客户端2的Cookie到期后,用户访问时会自动跳转到IDS4,只要IDS4的Cookie还在有效期内,就会直接携带新令牌跳转回客户端2,用户无感知,同时客户端2会生成新的10分钟有效期Cookie,完全符合安全要求。

场景2:要求客户端2用户10分钟无操作后必须重新输入账号密码

如果安全要求更高,不允许无感知重签,需要用户重新验证身份,只需在客户端2的OIDC配置中添加MaxAge参数即可:

.AddOpenIdConnect("oidc", options =>
{
    // 其余配置省略
    // 要求用户的登录时间距离当前不得超过10分钟,否则强制重新登录
    options.MaxAge = TimeSpan.FromMinutes(10);
});

该配置会在每次跳转到IDS4时自动带上OIDC标准参数max_age=600,IDS4会自动校验用户的登录时间,即使IDS4本身的Cookie还在有效期内,只要距离上次登录超过10分钟,就会强制弹出登录页要求用户重新输入账号密码,完全满足高安全要求。

补充注意事项
  • 不要将IDS4的Cookie有效期设置得短于所有客户端的最长有效期,否则会导致所有业务系统都需要频繁重新登录,影响用户体验
  • 多安全等级客户端的差异化会话要求,优先使用OIDC标准的max_age参数实现,不需要调整IDS4全局配置
  • IDS4和各客户端的滑动过期规则可独立配置,互不影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:54:02