带有身份验证的 WCF 流式处理
Posted
技术标签:
【中文标题】带有身份验证的 WCF 流式处理【英文标题】:WCF Streaming with authentication 【发布时间】:2014-07-23 13:04:16 【问题描述】:我有一个 WCF 服务,它必须通过 Windows 和证书身份验证进行保护。 我知道 wsHttpBinding 不支持 Streaming 但according to msdn 它可以使用传输安全和 customBinding 来完成,但我无法做到......
<customBinding>
<binding name="AuthBinding">
<mtomMessageEncoding maxBufferSize="65535" />
<windowsStreamSecurity protectionLevel="Sign"/>
<httpTransport transferMode="Streamed" maxReceivedMessageSize="2147483647" />
</binding>
</customBinding>
我要从一个例外转到另一个:
绑定“System.ServiceModel.Channels.CustomBinding”的安全功能与生成的运行时对象的不匹配。这很可能意味着绑定包含 StreamSecurityBindingElement,但缺少支持 Stream Security 的 TransportBindingElement
或者
请求消息必须受到保护。这是合约操作('IEntity'、'WebService.Entity')所要求的。保护必须由绑定提供('CustomBinding','WebService.Entity')
【问题讨论】:
您面临的实际问题是什么? 【参考方案1】:这不是一步完成,而是两步。
通过证书身份验证启用传输安全性。
使用 Windows 身份验证启用传输安全性。
我也不确定两者可以一起工作。
但发现的 MSDN 文章似乎指向了正确的方向:
How to: Secure a Service with Windows Credentials with wsHttpBinding
请参考 MSDN 中的这些链接以进行进一步学习(如果您急于交付一些里程碑,帮助不大):
Transport Security with Windows Authentication
Transport Security with Certificate Authentication
更新
您必须使用具有混合(使用消息凭据传输)安全模式的自定义绑定。
三个绑定元素与消息级别的安全性相关,它们都派生自SecurityBindingElement
类。
这三个是TransportSecurityBindingElement
、SymmetricSecurityBindingElement 和AsymmetricSecurityBindingElement
。 TransportSecurityBindingElement
用于提供混合模式安全。当消息层提供安全性时,使用其他两个元素。
提供传输级安全性时使用其他类:
HttpsTransportBindingElement
SslStreamSecurityBindingElement
WindowsStreamSecurityBindingElement
您可以获得以下帮助:
How to: Create a Custom Binding Using the SecurityBindingElement
和
Security Capabilities with Custom Bindings
【讨论】:
wsHttpBinding 不允许使用 Streaming,我必须使用 customBinding,但这很棘手 是的,如果你是第一次做的话,这很棘手,而且很花时间。【参考方案2】:这对我有用:
<basicHttpBinding>
<binding name="basic" transferMode="Streamed" messageEncoding="Mtom">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" />
</security>
</binding>
</basicHttpBinding>
【讨论】:
以上是关于带有身份验证的 WCF 流式处理的主要内容,如果未能解决你的问题,请参考以下文章
iOS 使用基于 Cookie 的身份验证从服务器流式传输音频