HTTP请求未经授权使用客户端身份验证方案' Negotiate'。从服务器收到的身份验证标题是“协商”#39;

时间:2014-03-19 08:56:00

标签: wcf biztalk wcf-binding

我需要调用一个Web服务,为了便于测试,我已经为此创建了一个Console-app。但它需要在BizTalk中工作,而事实并非如此。

这是app.config中非常简单的配置:

<basicHttpBinding>
    <binding name="XXXWebService_Binding"  textEncoding="utf-16">
        <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows" />
        </security>
    </binding>
</basicHttpBinding>

在调用Web服务之前,我需要指定Windows凭据:

proxy.ClientCredentials.Windows.ClientCredential.Domain = "xxx";
proxy.ClientCredentials.Windows.ClientCredential.UserName = "xxx";
proxy.ClientCredentials.Windows.ClientCredential.Password = "xxx";

这应该有效。

所以我需要在BizTalk中使用它。我使用带有basicHttpBinding的WCF-Custom适配器,其配置与我的Console-App相同: BizTalk basicHttpBinding

要指定凭据,我将它们插入凭据选项卡中。  BizTalk Credentials

当我测试这个时,我收到此错误消息:

System.Net.WebException: The HTTP request is unauthorized with client authentication scheme 'Negotiate'. The authentication header received from the server was 'Negotiate'.

有谁知道这可能是什么?

在MSDN上(对于WCF-BasicHttp Adapter)我发现了这个: Windows:Windows集成身份验证。运行此发送端口的用户帐户用于服务以验证此发送端口。

是否可以忽略正确的凭据并使用主机实例的凭据(即使我可以在“传输失败”消息的上下文属性中找到正确的凭据)?

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

Windows身份验证将使用登录用户的帐户执行进程,对于BizTalk,将使用主机实例服务帐户。

“凭据”框仅适用于“基本身份验证”。这就是它的连接方式。

我从未走过这条路,但我认为您需要使用自定义绑定元素(如行为)来设置备用Windows凭据。