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

BizTalk 2020调用跨机内部Web服务遇Negotiate认证未授权问题

BizTalk 2020跨机器调用Web服务Negotiate身份验证失败解决方案

问题分析

报错System.Net.WebException: The HTTP request is unauthorized with client authentication scheme 'Negotiate'. The authentication header received from the server was 'Negotiate'表明Negotiate身份验证流程未完成。BizTalk 2016到2020的升级涉及.NET框架(4.7.2)和底层安全机制的调整,Kerberos配置、自定义Behavior干扰、域信任问题是核心排查方向。

排查与解决步骤

1. 校验Kerberos SPN与委派配置

  • 检查Web服务所在机器的SPN注册情况:执行setspn -L <Web服务运行账号>,确认存在HTTP/<Web服务器FQDN>、HTTP/<Web服务器NetBIOS名>;若服务使用自定义端口,需额外注册HTTP/<Web服务器FQDN>:<端口号>。
  • 配置BizTalk主机实例账号的约束委派:在AD用户属性的「委派」标签,选择「仅信任此用户委派到指定服务」,添加Web服务对应的HTTP SPN,确保账号有权限向Web服务委派身份。

2. 调整发送端口配置

  • 确认WCF绑定安全设置:发送端口使用WCF-BasicHttp/WCF-WSHttp绑定时,安全模式设为Transport或TransportWithMessageCredential,客户端凭据类型选择Windows。
  • 临时移除自定义Behavior:先禁用bizTalkAddHttpheaders Behavior测试调用,排除自定义代码篡改请求头导致Negotiate流程异常的可能。
  • 检查模拟设置:若发送端口启用模拟,确认模拟账号具备Web服务访问权限,且该账号的SPN/委派配置无误。

3. .NET框架与系统安全配置

  • 修改BizTalk主机配置文件(BTSNTSvc.exe.config/BTSNTSvc64.exe.config),添加Kerberos与TLS 1.2相关配置:
    <configuration>
      <system.net>
        <settings>
          <servicePointManager securityProtocol="Tls12" />
        </settings>
      </system.net>
      <system.serviceModel>
        <bindings>
          <basicHttpBinding>
            <binding>
              <security mode="Transport">
                <transport clientCredentialType="Windows" />
              </security>
            </binding>
          </basicHttpBinding>
        </bindings>
        <behaviors>
          <endpointBehaviors>
            <behavior>
              <clientCredentials>
                <windows allowedImpersonationLevel="Impersonation" />
              </clientCredentials>
            </behavior>
          </endpointBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>
    
  • 确保BizTalk服务器和Web服务服务器均启用TLS 1.2,禁用SSL 3.0、TLS 1.0/1.1等旧协议。
  • 确认两台机器处于同一域或双向信任域,避免Kerberos协商失败后NTLM fallback受阻。

4. 调试身份验证流程

  • 用Fiddler抓取请求,查看Negotiate头的交互:检查是否发送有效Kerberos票据,是否出现多次401挑战。
  • 在Web服务服务器开启Kerberos日志(事件查看器→应用程序和服务日志→Microsoft→Windows→Kerberos-Key-Distribution-Center),通过事件ID(如7、10)定位票据请求失败原因。
  • 用ktpass工具验证Web服务账号的密钥与SPN关联是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:22:38