使用身份验证进行WCF流传输

3

我有一个WCF服务,必须使用Windows和证书身份验证进行安全保护。 我知道wsHttpBinding不支持流式传输,但 根据MSDN ,可以使用自定义绑定的传输安全性来实现,但我无法做到...

<customBinding>
    <binding name="AuthBinding">
      <mtomMessageEncoding maxBufferSize="65535" />
      <windowsStreamSecurity protectionLevel="Sign"/>
      <httpTransport transferMode="Streamed" maxReceivedMessageSize="2147483647" />
    </binding>
</customBinding>

我一直在处理异常:

绑定“System.ServiceModel.Channels.CustomBinding”的安全功能与生成的运行时对象不匹配。很可能这意味着绑定包含一个StreamSecurityBindingElement,但缺少支持流安全性的传输绑定元素。

或者

请求消息必须受到保护。这是合同('IEntity', 'WebService.Entity')的操作所要求的。绑定('CustomBinding','WebService.Entity')必须提供保护。


你面临的实际问题是什么? - Pranav Singh
2个回答

1
这不是一步完成的过程,而是一个两步骤的过程。
  1. 启用证书认证的传输安全。

  2. 启用 Windows 认证的传输安全。

我也不确定两者是否能够同时使用。

但是 MSDN 找到的文章似乎指向了正确的方向:

如何使用 wsHttpBinding 保护具有 Windows 凭据的服务

请参考 MSDN 上的这些链接以进行进一步学习(如果你在赶时间交付一些里程碑,则帮助不大):

使用 Windows 认证的传输安全

使用证书认证的传输安全


更新

您需要使用自定义绑定,使用混合(传输和消息凭据)安全模式。

三个绑定元素与消息级别安全有关,全部都源自 SecurityBindingElement 类。

这三个元素分别是 TransportSecurityBindingElement、SymmetricSecurityBindingElement 和 AsymmetricSecurityBindingElement。当使用 TransportSecurityBindingElement 时,可以提供混合模式安全。另外两个元素用于在消息层提供安全保护。

在提供传输级别安全性时,还会使用其他类:

HttpsTransportBindingElement  
SslStreamSecurityBindingElement 
WindowsStreamSecurityBindingElement

您可以获取以下帮助:

如何使用SecurityBindingElement创建自定义绑定

以及

使用自定义绑定的安全功能


1
wsHttpBinding不允许使用流式传输,我必须使用customBinding,但这很棘手。 - Peekyou
是的,如果你第一次做这个,它是一个棘手而且非常耗时的任务。 - Pranav Singh

0
这对我有效:
<basicHttpBinding>
    <binding name="basic"  transferMode="Streamed" messageEncoding="Mtom">
        <security mode="TransportWithMessageCredential">
            <message clientCredentialType="UserName" />
        </security>
    </binding>
</basicHttpBinding>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接