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

两个IIS站点间Windows身份验证跨站调用出现401未授权问题求助

IIS跨站点Windows身份验证凭据传递配置方案

当两个启用Windows身份验证的IIS站点互相调用出现401未授权时,需从以下几个维度配置:

1. 配置Kerberos委派(核心解决跨站点身份传递)

  • 优先启用Kerberos身份验证:在每个站点的「身份验证」设置中,编辑Windows身份验证的提供程序,将Kerberos移至NTLM上方。
  • 注册服务主体名称(SPN):以管理员身份运行命令行,为目标站点的应用池账户注册SPN,示例命令:
    setspn -S HTTP/目标站点域名 应用池运行账户
    
    比如目标站点域名为default.internal.com,应用池账户为DOMAIN\IISAppPoolAcct,则执行:
    setspn -S HTTP/default.internal.com DOMAIN\IISAppPoolAcct
    
  • AD中配置约束委派:在Active Directory用户和计算机中,找到应用池运行账户(若用默认ApplicationPoolIdentity则选服务器机器账户),进入「属性」-「委派」,选择「仅信任此用户进行指定服务的委派」,添加目标站点的HTTP服务(即刚才注册的SPN)。

2. IIS站点基础配置调整

  • 禁用内核模式身份验证:在站点的Windows身份验证设置中,取消勾选「启用内核模式身份验证」(跨站点场景下内核模式会导致身份凭据无法正确传递)。
  • 验证授权规则:确保目标站点的「授权规则」允许调用方用户(即测试站点的访问用户)具备访问权限,避免因权限不足导致401。

3. 应用代码层面配置

  • 若为.NET应用,在web.config中确保已启用Windows身份验证:
    <system.web>
      <authentication mode="Windows" />
    </system.web>
    
  • 调用目标站点时,需显式传递当前用户凭据,以HttpClient为例:
    var handler = new HttpClientHandler
    {
        UseDefaultCredentials = true // 自动携带当前Windows用户凭据
    };
    using var client = new HttpClient(handler);
    var response = await client.GetAsync("目标站点API或页面URL");
    

4. 客户端与本地安全策略配置

  • 将两个站点的域名添加到浏览器的本地Intranet区域:打开Internet选项→安全→本地Intranet→站点→高级,输入站点域名并添加,浏览器会自动对该区域内的站点传递Windows凭据。
  • 调整本地安全策略:打开「本地组策略编辑器」,依次进入计算机配置→Windows设置→安全设置→本地策略→安全选项,修改:
    • 「网络安全: LAN管理器身份验证级别」设置为「发送NTLMv2响应\拒绝LM和NTLM」
    • 若为跨域场景,启用「网络安全: 允许跨森林的NTLM身份验证」

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:40:30