WCF安全 - 新手问题 -

时间:2012-03-11 19:46:14

标签: wcf wcf-binding wcf-security wshttpbinding

我一整天都在阅读有关WCF安全的内容,并且不能说我对它感到满意。

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

回答你的第一个问题。 wsHttpBinding不需要 HTTPS。如果将SecurityMode设置为Message或None,则可以使用HTTP。但是,由于您建议使用服务调用发送用户名和密码,因此您肯定不应该这样做。如果您这样做,那么任何人都可以查看传输中的消息并阅读用户名和密码,您的安全性完全受到损害。我担心您必须获得证书并使用HTTPS。虽然它并不是那么糟糕,网上有很多资源可以帮助你。

顺便说一句,您可以使用basicHttpBinding以及wsHttpBinding来执行HTTPS。此外,您应该考虑使用REST来简化。 WCF对它有很好的支持(webHttpBinding)以及对Web API的更好支持。

在回答第二个问题时,您不需要呼叫者成为服务器上的Windows用户,您可以使用用户名和密码。这称为基本身份验证。再一次,网上有很多关于它的内容。开始here

如果你这样做,你显然必须有一个数据库来存储用户名和密码,这样你就可以验证然后授予或拒绝访问你的服务。使用WCF实现此目的的最简单方法是使用默认membership providers之一。