我还是WCF的新手,并且在WCF中有一些关于为什么需要某些部分的问题,如果是的话:
1)我有一个使用WCF服务与数据库通信的应用程序。我在本地计算机上设置了测试SSL证书,并将WCF服务的web.config设置为:
<wsHttpBinding>
<binding name="MyService" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="Windows" />
<message clientCredentialType="UserName"/>
</security>
</binding>
</wsHttpBinding>
由于我已经设置了SSL,因此我必须通过将clientCredentialType设置为Windows来实现传输安全性。 SSL是否负责来回传递数据的安全性?我得到的消息片,因为我设置了一个自定义类来验证用户。我只是不明白为什么我需要它用于传输,如果我不需要它,当它设置到Windows时它做什么,这是否意味着公司网络中的所有消息都很好,但如果在网络之外的任何东西试图与它被阻止的服务交谈?
2)对于本节:
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
当我去制作时,两者都应该设置为错误正确吗?那么这种方式试图设置生产URL的服务引用的任何其他应用程序都将被阻止,或者无法构建代理类?
3)includeExceptionDetailInFaults,我应该总是将其保留为false吗?目前,当WCF服务发生错误时,我有代码抛出一个新的FaultException,然后传播到Web应用程序中的方法,该方法向我发送一封错误消息的电子邮件,用户只是得到一般错误页。
谢谢。答案 0 :(得分:2)
1.如果您在内部使用您的服务,那么您可以使用此配置,但是 客户端和服务器都应位于同一域中。 Windows凭据是必需的,因为某些证书放置在Windows中的用户级证书存储中,要对其进行身份验证,您需要提供用户凭据。
2.如果您不希望任何人创建代理,请继续。
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
表示用户只能在https连接上看到WSDL元数据,而不能在http上看到。因此,如果某些人需要创建代理,他们必须使用您服务的https网址。
3.取决于您的要求,如果您不希望您的用户看到错误详细信息。那没关系。这仅适用于调试。所以你是对的。
More details on Transport Security
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
答案 1 :(得分:1)
这里有很多有用的信息:http://msdn.microsoft.com/en-us/library/aa354508.aspx
在这里:http://msdn.microsoft.com/en-us/library/ms789011.aspx
1)传输安全只是处理网络级安全性;当您指定Message + Transport时,您说您希望邮件本身也需要身份验证;仅仅拥有有效的SSL配置是不够的。 ClientCredential Windows,意味着尝试使用正在运行的进程的有效Windows凭据。
默认情况下,wsHttpBinding绑定提供HTTP通信。配置为传输安全性时,绑定支持HTTPS通信。 HTTPS为通过线路传输的消息提供机密性和完整性保护。但是,可用于向服务验证客户端的身份验证机制集仅限于HTTPS传输支持的内容。 Windows Communication Foundation(WCF)提供TransportWithMessageCredential安全模式,旨在克服此限制。配置此安全模式后,传输安全性将用于为传输的消息提供机密性和完整性,并执行服务身份验证。但是,客户端身份验证是通过将客户端凭据直接放入消息中来执行的。这允许您使用消息安全模式支持的任何凭据类型进行客户端身份验证,同时保持传输安全模式的性能优势。
2)您是否允许HTTP“GET”操作完全取决于您和您的安全首选项;它确实使您的服务模糊不清,但却使其不易使用。
3)您的回复中是否包含异常详细信息在很大程度上取决于您对服务的消费者的信任程度。当消费者有例外时,他们将能够更好地对自己的错误做出反应,同时也能获得有关您服务实施的更多信息。