同一IIS服务器上第二个站点的ASP.NET Kerberos双跳模拟失效问题
Kerberos双跳授权异常问题(Site2无法委托客户端身份到SQL)
环境背景
现有内网Kerberos双跳架构:Client->IIS->SQL,端到端采用Windows集成身份验证,IIS应用池标识与SQL服务账户均为独立域账户。该架构原在Windows Server 2008上稳定运行10年,迁移至Windows Server 2022/IIS后正常运行2个月(域控制器同步升级至2022,仅需将无约束委托改为约束委托,预生产测试与旧IIS服务器表现一致)。
问题场景
为优化跨环境访问,创建测试站点Site2,复用已配置好SPN的现有应用池标识(默认网站始终处于停止状态):
- Site1绑定(正常工作):
- http://IISNetBiosName:CustomPort/home
- http://HostHeader:80/home(HostHeader为指向该IIS服务器的DNS别名)
- https://HostHeader:443/home
- Site2绑定(均无法工作):
- http://HostHeader:80/Environment/home
- https://HostHeader:443/Environment/home
Site2根物理目录比Site1高一级,但两者的~/home指向同一物理目录/应用,目的是通过同一HostHeader/绑定/端口访问不同环境,替代Site1使用不同自定义端口的繁琐方式。
问题现象
已确保不同时启动存在重复绑定的两个站点,但Site2无法将客户端用户身份模拟委托至SQL:输入用户凭据后,SQL返回NT AUTHORITY/ANONYMOUS拒绝错误;停止Site2并启动Site1则恢复正常,每次测试均清除客户端缓存。
站点配置一致性
两个站点的IIS配置完全一致:
- ASP.NET->.NET授权规则:允许
domain\domain users(继承配置) - IIS->身份验证:匿名身份验证禁用、ASP.NET模拟启用(已验证用户)、表单身份验证禁用、Windows身份验证启用(高级设置:必填/内核检查;身份验证提供者:Negotiate)
已尝试的无效排查操作
- 客户端执行
klist purge清除Kerberos票据 - 命令行执行
iisreset重启IIS - 通过GUI重启站点
- 清除客户端浏览器缓存
- 通过GUI回收应用池
- 验证无重复SPN
- 重新创建IIS SPN
- 确认相关目录NTFS权限一致
- 将HostHeader加入Internet选项本地Intranet区域
- 配置Google Chrome的
AuthNegotiateDelegateAllowlist策略
内容的提问来源于stack exchange,提问作者jls206
相关产品推荐
相关产品推荐

