0

我一整天都在阅读有关 WCF 安全性的信息,但不能说我对它感到满意。

我已经开发了一些 WCF 服务并将它们部署到测试服务器,并且可以从客户端调用。双方 C#/VS 2010。服务托管在 IIS 6 下。目前没有选择更新的选项。

所以 - 我读过我只能在 IIS 6 中使用 HTTP - 我相信这限制了我使用 basicHttpBinding 或 wsHttpBinding 作为绑定。

我还读到使用 wsHttpBinding 通过网络发送的 XML 是加密的,而 basicHttpBinding 不是。

所以看起来我想使用 wsHttpBinding,因为我需要某种身份验证,并且我想用户名/密码将与传入的消息一起传递。

第一个问题是 - 如果我使用 wsHttpBinding 客户端是否必须使用 https 调用?然后我需要担心服务器上的证书等吗?

第二个问题是 - 我可以使用哪些安全选项?调用者必须是服务器上的 Windows 用户,还是我可以自己编一个用户名/密码,让服务的那部分和服务进行验证,与 Windows 用户无关?如果我必须与 Windows 用户一起使用,我想在服务器上设置一个用户帐户并让所有呼叫者都使用它是很常见的吗?

基本思想是我需要向选定的调用者开放此服务,但不希望任何人都能够发现该服务并调用它。我需要以某种方式控制谁调用该服务。用户名/密码是执行此操作的标准方式吗?例如,我可以定义一个所有调用者都必须通过的 GUID 吗?

4

1 回答 1

0

在回答你的第一个问题。wsHttpBinding不需要HTTPS。如果将 SecurityMode 设置为 Message 或 None,则可以使用 HTTP。但是,由于您提议在服务调用中发送用户名和密码,因此您绝对不应该这样做。如果您这样做,那么任何人都将能够查看传输中的消息并阅读用户名和密码,您的安全将完全受到威胁。恐怕您必须获得证书并使用 HTTPS。不过还不错,网上有很多资源可以帮助您。

顺便说一句,您可以使用 basicHttpBinding 以及 wsHttpBinding 进行 HTTPS。此外,为简单起见,您应该考虑使用 REST。WCF 对它有很好的支持 (webHttpBinding) 和Web API提供的更好的支持。

在回答您的第二个问题时,您不需要调用者是您服务器上的 Windows 用户,您可以使用用户名和密码。这称为基本身份验证。同样,网络上有很多关于它的信息。从这里开始。

如果您这样做,您显然必须有一个数据库来存储用户名和密码,以便您可以验证并授予或拒绝对您的服务的访问。使用 WCF 实现此目的的最简单方法是使用默认成员资格提供程序之一。

于 2012-03-11T20:14:06.743 回答