【问题标题】:"The HTTP request is unauthorized with client authentication scheme 'Negotiate'. The authentication header received from the server was 'Negotiate'"“HTTP 请求未经客户端身份验证方案‘协商’未经授权。从服务器收到的身份验证标头为‘协商’”
【发布时间】:2014-03-19 08:56:00
【问题描述】:

我需要调用一个 Web 服务,为了便于测试,我为此创建了一个控制台应用程序。但它需要在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 自定义适配器,其配置与我的控制台应用程序相同:

为了指定凭据,我将它们插入到 凭据 选项卡中。

当我对此进行测试时,我收到以下错误消息:

System.Net.WebException:HTTP 请求未经客户端身份验证方案“协商”的授权。从服务器收到的身份验证标头是“协商”。

这可能是什么?

在 MSDN 上(WCF-BasicHttp Adapter)我发现了这个:

Windows:Windows 集成身份验证。运行此发送端口的用户帐户用于服务验证此发送端口。

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

【问题讨论】:

    标签: wcf biztalk wcf-binding


    【解决方案1】:

    Windows 身份验证将使用登录用户的帐户来执行进程。对于 BizTalk,这将是 Host Instance Service 帐户。

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

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

    【讨论】:

    • 谢谢。我不知道。我编写了一个添加 Windows 凭据的自定义 EndpointBehavior,现在它可以工作了!
    【解决方案2】:

    当我尝试使用 Get-OfficeWebAppsFarm 时,我得到了答案:

    【讨论】:

    • 您能否将来自终端的文本作为文本提供,作为图像提供?您可以edit (change) your question 并在选定文本上使用 Ctrl + K(假设是桌面系统)。参见例如Why not upload images of code/errors when asking a question?。 (但请不使用 "Edit:""Update:" 或类似方法 - 答案应该看起来好像是现在写的。)提前致谢。
    • 这如何回答这个问题(不是反问问题)?使用 Get-OfficeWebAppsFarm 如何回答问题?请通过editing (changing) your answer 回复,而不是在 cmets 中(without "Edit:"、"Update:" 或类似的 - 答案应该看起来像是今天写的)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 2013-03-12
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    相关资源
    最近更新 更多