同时使用HTTP基本身份验证和Ws-Security

时间:2016-03-04 16:15:40

标签: c# soap ws-security

我正在尝试编写一个消耗SOAP 1.2 Web服务的C#客户端应用程序。此服务受HTTP基本身份验证和WS-Security身份验证保护,每个身份验证具有不同的凭据。这不是我的网络服务所以我无法改变它。

在我的.config文件中,我有:

<wsHttpBinding>
    <binding name="wsHttpsBinding">
        <security mode="TransportWithMessageCredential">
            <message clientCredentialType="UserName" />
        </security>
    </binding>
</wsHttpBinding>

在我的代码中,我使用它来设置WS-Security凭证:

        client.ClientCredentials.UserName.UserName = header.UniqueId;
        client.ClientCredentials.UserName.Password = header.Password;

执行此操作时,WS-Security标头已成功添加到SOAP消息中,但缺少HTTP授权标头。我尝试使用以下方法手动添加:

using (OperationContextScope scope = new OperationContextScope(client.InnerChannel))
        {
            var httpRequestProperty = new HttpRequestMessageProperty();
                       httpRequestProperty.Headers[System.Net.HttpRequestHeader.Authorization] = 
                "Basic " +
                Convert.ToBase64String(Encoding.ASCII.GetBytes(httpAuthUser + ":" +
                httpAuthPassword));

            OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;

但该代码似乎被忽略了。

0 个答案:

没有答案