wcf - 使用 CustomBinding 进行抢占式身份验证?

标签 wcf soap basic-authentication

我正在使用 WCF 针对客户的 SOAP 服务编写客户端。

我们已经尝试过多次尝试使身份验证正常工作。我最终使用了自定义绑定(bind),因为网络上的一些随机人员说 BasicHttpBinding 不支持必要的安全选项,而 WsHttpBinding 不支持 SOAP 1.1,而这正是他们正在使用的。

所以,我有什么:

var message = this.constructMessagecollection);

if (message != null)
{
    var ea = new EndpointAddress(this.webServiceUrl);

    var binding = new CustomBinding();
    binding.Elements.Add(new TextMessageEncodingBindingElement(
            MessageVersion.Soap11, Encoding.UTF8));
    binding.Elements.Add(new HttpsTransportBindingElement { AuthenticationScheme = System.Net.AuthenticationSchemes.Basic });

    using (var client = new CustomersWebserviceClient(binding, ea))
    {
        if (!String.IsNullOrWhiteSpace(this.webServiceUsername) && !String.IsNullOrWhiteSpace(this.webServicePassword))
        {
            var credentials = client.ClientCredentials.UserName;
            credentials.UserName = this.webServiceUsername;
            credentials.Password = this.webServicePassword;
        }

        var result = client.ReceiveMessage(message);
        log.writeLine(String.Format("Call to client.ReceiveMessage() returned {0}", result));
    }

    return true;
}

现在,有人问我是否可以将我的客户端配置为进行抢占式身份验证。我浏览了一些网页,但没有找到太多。我不知道如何将我发现的一点点集成到我当前的代码中。

最佳答案

我认为您不能将 WCF 配置为预身份验证。您的选择是手动将 header 添加到每个请求,或者构建一个消息检查器来完成并配置一次。无论哪种方式,这些设置都与绑定(bind)无关。我想您可以编写自己的自定义 http 传输(内部使用常规 http 传输)并将其添加到那里,但不确定是否值得付出努力。如所述 here , 要手动添加它,您可以使用:

HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty(); 

httpRequestProperty.Headers[HttpRequestHeader.Authorization] = "Basic " + 
    Convert.ToBase64String(Encoding.ASCII.GetBytes(client.ClientCredentials.UserName.UserName + ":" + 
    client.ClientCredentials.UserName.Password));

using (OperationContextScope scope = new OperationContextScope(client.InnerChannel)) 
{ 
    OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = 
        httpRequestProperty;

    // Invoke client 
}

至于第二个选项,这见这里如何add headers with a message inspector .

关于wcf - 使用 CustomBinding 进行抢占式身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26366045/

相关文章:

c++ - gSOAP - 如何使用 SSL 和自签名证书

java - WebService 无法处理没有命名空间前缀的 SOAP 主体的请求

PHP-EWS "Soap client returned status of 404"

python - Flask 应用程序中的密码保护一个网页

java - 登录Spring Security后如何返回Basic token?

WPF、WCF、Entity、MVVM的疑惑!

wcf - Json.net 无法反序列化复杂类型列表

c# - 如何从 header 中检索基本身份验证凭据?

wcf - 带有 Windows 容器的 Docker 在 tcp 服务上支持 wcf

c# - 使用接口(interface)进行远程或 WCF 的新开发(在同一台机器上的两个 .NET 应用程序之间)?