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

Identity Server4 客户端会话超时配置后静默重认证、SSO失效问题咨询

问题根源

你遇到的现象本质是混淆了两套独立的身份会话体系:

  • 客户端本地Cookie会话:你通过AddCookie配置的是当前站点的登录态有效期,会话过期后会自动触发到Identity Server(IDS)的认证重定向
  • IDS端SSO会话:用户首次登录IDS后,浏览器会在IDS域名下留存SSO会话Cookie,只要该Cookie未过期,不带特殊参数的OIDC认证请求会直接拿到有效身份凭证,无需用户再次输入账号密码,也就是你遇到的「静默重登」现象

你后续全局配置options.Prompt = "login"的操作,相当于强制所有OIDC认证请求都要求用户重新登录,自然会导致跨站点的SSO能力完全失效,该配置不应该全局生效。

正确实现方案

第一步:修正Cookie配置实现无操作计时

你之前将SlidingExpiration设为false,代表Cookie是绝对有效期,无论用户是否有操作,登录后满5分钟就会过期,不符合「无操作满5分钟过期」的需求,需要调整为开启滑动过期:

.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{
    options.ExpireTimeSpan = TimeSpan.FromMinutes(5);
    options.SlidingExpiration = true; // 用户每次活跃操作会自动刷新Cookie过期时间
})

第二步:按需添加强制登录参数

删除OIDC配置里全局的options.Prompt = "login",通过OIDC事件拦截重定向请求,仅在客户端本地会话过期触发的重认证场景下添加强制登录参数,其他正常登录场景保留SSO能力:

.AddOpenIdConnect("oidc", options =>
{
    // 保留你的其他原有配置
    options.Events = new OpenIdConnectEvents
    {
        OnRedirectToIdentityProvider = context =>
        {
            // 判断当前重定向为本地会话过期触发的重认证
            if (context.HttpContext.User.Identity?.IsAuthenticated == false 
                && !string.IsNullOrEmpty(context.Properties.RedirectUri))
            {
                context.ProtocolMessage.Prompt = "login";
            }
            return Task.CompletedTask;
        }
    };
})

可选优化

如果需要更严格的会话管控,可以同步在Identity Server端配置SSO会话的最大有效期,避免用户只要不关闭浏览器就能长期通过静默认证恢复登录态,可根据业务需求调整。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:18:02