我正在尝试使用 WCF 来使用客户端的 Web 服务。客户端的 Web 服务是通过 HTTPS 完成的,我可以通过以下绑定(bind)很好地使用它:
<bindings>
<basicHttpBinding>
<binding name="PurchaseOrderSoap" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="Transport" />
</binding>
</basicHttpBinding>
</bindings>
但是,我们的安全团队告诉我,我需要使用 Message
或 TransportWithMessageCredential
安全性,因为 Fortify 360 提示 Transport
安全性太低虚弱的。
当我尝试 Meesage
时,出现此错误:
System.InvalidOperationException: BasicHttp binding requires that
BasicHttpBinding.Security.Message.ClientCredentialType be equivalent to the
BasicHttpMessageCredentialType.Certificate credential type for secure messages. Select
Transport or TransportWithMessageCredential security for UserName credentials.
使用 TransportWithMessageCredential
我收到以下错误:
System.InvalidOperationException: The username is not provided. Specify username in
ClientCredentials.
我没有用户名/密码(我可以在浏览器中正常连接到它),所以我的问题是:
在使用现有 HTTPS Web 服务(发布者无需进行任何更改)时,我可以使用 Message
或 TransportWithMessageCredentials
吗?如果是这样,我需要对我的配置进行哪些更改?
编辑以澄清问题。
最佳答案
如果您无法让第三方供应商向其支持消息安全的服务添加端点,那么您就会陷入困境。看来他们目前只支持具有传输级别安全性的 basicHttpBinding。
传输安全性并不比消息级安全性“差”。消息级安全性意味着 SOAP 消息的内容是加密的。这使您可以以明文方式存储或转发消息,并且仍然可以确保没有人可以偷看该消息。如果您所做的只是通过互联网在系统和供应商之间进行通信,那么传输和消息级别的安全性同样安全。
关于web-services - 使用 WCF 使用 HTTPS Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5634441/