WCF 配置/身份验证在 Azure 中不起作用

Posted

技术标签:

【中文标题】WCF 配置/身份验证在 Azure 中不起作用【英文标题】:WCF configuration/authentication not working in Azure 【发布时间】:2018-04-15 08:15:45 【问题描述】:

我正在尝试调用具有 Windows 身份验证的外部服务,它可以在我在 IIS 中运行的 Windows 开发机器上正常工作,但是一旦我将站点发布到 Azure,即使配置为相同的。我得到的错误是,

System.ServiceModel.Security.MessageSecurityException:
The HTTP request is unauthorized with client authentication scheme 'Negotiate'.
The authentication header received from the server was 'Negotiate'. --->
System.Net.WebException: The remote server returned an error: (401) Unauthorized.

感觉就像在 Azure 中它甚至没有尝试进行身份验证。

服务的配置如下所示,

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="Custom_Binding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferPoolSize="524288" receiveTimeout="00:20:00" sendTimeout="00:20:00">
                <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                <security mode="TransportCredentialOnly">
                    <transport clientCredentialType="Windows" />
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://www.otherdomain.com/webServiceRequest" binding="basicHttpBinding" bindingConfiguration="Custom_Binding" contract="webServiceRequest_Port" name="webServiceRequest_Port" />
    </client>
</system.serviceModel>

这是发出请求的 c# 代码,

var client = new webServiceRequest_PortClient();
client.ClientCredentials.UserName.UserName = "domain\Username";
client.ClientCredentials.UserName.Password = "Password";
var response = await client.PerformServiceAsync(method, request);

/维克托

【问题讨论】:

【参考方案1】:

如果您设置 Windows 凭据,它会起作用吗?

var client = new webServiceRequest_PortClient();
client.ClientCredentials.Windows.ClientCredential.UserName = "domain\Username";
client.ClientCredentials.Windows.ClientCredential.Password = "Password";
var response = await client.PerformServiceAsync(method, request);

【讨论】:

谢谢。这是解决方案的一部分,我这边也有一些密码和用户名的配置问题。出于某种原因,当我运行 ClientCredentials 而不是 Windows 时,它起作用了。【参考方案2】:
System.ServiceModel.Security.MessageSecurityException:
The HTTP request is unauthorized with client authentication scheme 'Negotiate'.
The authentication header received from the server was 'Negotiate'. --->
System.Net.WebException: The remote server returned an error: (401) Unauthorized

根据例外情况,我假设您将网站发布到 Azure WebApp。

如果我们想使用 Windows Authenticated,我们需要确保为 Web 服务器启用了 Windows 身份验证。我们可以remote to Azure website查看Authentication选项下是否没有Windows Authenticated,具体请看截图。

如果 Azure 可以提供服务,可以使用 Azure cloud service 作为解决方法。

【讨论】:

抱歉,忘了说它是应用服务。 Azure还允许我们远程访问WebApp站点,详情请参考blog。

以上是关于WCF 配置/身份验证在 Azure 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 Azure Active Directory 时 SonarLint 身份验证不起作用

基本身份验证在Spring-Boot WS Soap服务中不起作用

部署到 Azure 时,Google 身份验证不起作用

单点登录在 Spring Web 应用程序中不起作用

firebase电话身份验证在发行版中不起作用[重复]

Windows 身份验证在 Flex 中不起作用