Identity Server 3 Windows认证无法自动获取当前用户会话问题
Identity Server 3 集成Windows登录MVC应用异常修复
异常表现
- 选择Windows登录选项时弹出凭证输入弹窗,无法自动完成身份校验
- 关闭浏览器重新访问时重复弹出凭证输入要求,Windows认证会话无法持久化
- 部署环境:Windows Server 2016
修复步骤
一、解决弹窗要求输入凭证、无法自动识别系统登录用户问题
- 服务器角色与IIS配置校验
- 打开Windows Server 2016服务器管理器,添加Web服务器(IIS)角色下的「Windows身份验证」安全组件,系统默认未安装该功能。
- 定位到IIS站点下的WS-Federation登录端点(一般为
/wsfed路径),单独配置该路径的身份验证规则:启用Windows身份验证,禁用匿名身份验证;站点根路径保留匿名身份验证启用,避免静态资源、其他登录方式访问异常。 - 调整Windows身份验证提供程序顺序:优先放置「协商:Kerberos」,其次为NTLM;域环境下需确认站点运行服务账号配置了正确的SPN记录,避免Kerberos认证失败降级触发弹窗。
- WsFederation认证中间件配置补全
现有配置缺少集成认证相关关键参数,调整为如下配置:
var metadataAddress = config.FederatedAuthenticationMetaAddress; var manager = new SyncConfigurationManager(new ConfigurationManager<WsFederationConfiguration>(metadataAddress)); var wsFederation = new WsFederationAuthenticationOptions { AuthenticationType = "windows", Caption = "Windows", SignInAsAuthenticationType = signInAsType, ConfigurationManager = manager, Wtrealm = "urn:idsrv3", AuthenticationMode = AuthenticationMode.Passive, UseTokenLifetime = true, BackchannelHandler = new HttpClientHandler { UseDefaultCredentials = true, PreAuthenticate = true } }; app.UseWsFederationAuthentication(wsFederation);
二、解决认证会话无法持久化、重开浏览器重复认证问题
- 客户端浏览器配置
将应用域名加入客户端浏览器的「本地Intranet」站点列表,IE、Edge、Chrome默认对该区域站点自动传递当前Windows登录凭证,且允许持久化认证Cookie;域环境可通过组策略统一下发该配置,无需逐台手动设置。 - Identity Server 3 会话配置调整
开启持久化认证Cookie能力,调整会话有效期,参考配置如下:
var idsrvOptions = new IdentityServerOptions { // 其余原有配置保持不变 AuthenticationOptions = new AuthenticationOptions { IsPersistent = true, CookieLifetime = TimeSpan.FromDays(15), // 可根据实际安全需求调整有效期 CookieOptions = new CookieOptions { HttpOnly = true, Secure = CookieSecureOption.Always } } };
- IIS运行参数调优
调整对应应用程序池的空闲超时时间(默认20分钟,可按需调长),开启Windows身份验证的内核模式,减少重复身份校验开销。
内容的提问来源于stack exchange,提问作者Balu
相关产品推荐
相关产品推荐

