我正在尝试使用Azure服务总线中继向公司网络外部的用户公开WCF服务。
我在某种程度上取得了成功,但为了证明通信正常,我必须删除在WCF服务上实现的所有自定义用户名和密码身份验证。
我一直在谷歌搜索和阅读该主题一段时间,并相信NetTcpRelaySecurity模式是我需要进行更改的地方 - 从传输到TransportWithMessageCredential(因为这是客户端和服务在网络中使用的)
那么,如何在配置文件中更改此设置?到目前为止我找不到任何例子。
另外,我是以正确的方式来做这件事的吗?我可以通过服务总线将用户名和密码客户端凭据从外部客户端应用程序传递到WCF服务吗?
答案 0 :(得分:0)
你说得对,那里的样本配置并不多。您可以尝试进行配置。
NetTcpRelayBindingConstructor NetTcpRelayBinding构造函数(EndToEndSecurityMode,RelayClientAuthenticationType)
EndToEndSecurityMode有以下枚举。
Member name Description
None Security is disabled.
Transport Security is provided using a transport security, typically SSL.
Message Security is provided using SOAP message security.
TransportWithMessageCredential A secure transport (for example, HTTPS) provides integrity, confidentiality, and authentication while SOAP message security provides client authentication.
RelayClientAuthentication具有以下枚举。
Member name Description
RelayAccessToken If specified by a listener, the client is required to provide a security token.
None If specified by a listener, the client will not be required to provide a security token. This represents an opt-out mechanism with which listeners can waive the Access Control protection on the endpoint.
我见过的最接近的配置示例是 -
http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.servicebus.nettcprelaybinding.aspx
<bindings>
<!-- Application Binding -->
<netTcpRelayBinding>
<binding name="customBinding">
<!-- Turn off client authentication -->
<security relayClientAuthenticationType="None" />
</netTcpRelayBinding>
</bindings>
以下是您可以使用的示例:
<bindings>
<!-- Application Binding -->
<netTcpRelayBinding>
<binding name="customBinding">
<!-- Turn off client authentication -->
<security endToEndSecurityMode=”TransportWithMessageCredential” relayClientAuthenticationType="None" />
</netTcpRelayBinding>
</bindings>
但是,您必须确保在machine.config或应用程序配置文件中添加Service Bus绑定扩展元素才能使用它。如果没有,在任何情况下,visual studio都会为您抛出错误。
从客户端到服务的端到端安全性不是特定于服务总线的,而只是标准的WCF。 SB需要的唯一东西是下面的relayClientAuthenticationType。
<security mode="" relayClientAuthenticationType="RelayAccessToken">
nettcprelaybinding的安全性设置应与nettcpbinding类似。您可以使用nettcpbinding samples作为起点。