【问题标题】:WCF Security - Newbie questions -WCF 安全 - 新手问题 -
【发布时间】:2012-03-11 19:46:14
【问题描述】:

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

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

所以 - 我读到我只能将 HTTP 与 IIS 6 一起使用 - 我认为这限制了我使用 basicHttpBinding 或 wsHttpBinding 作为绑定。

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

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

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

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

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

【问题讨论】:

    标签: wcf wcf-binding wcf-security wshttpbinding


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 嗨,迈克,感谢您的快速回复。我不明白的一件事是您说我可以使用 HTTP 并将 securityMode 设置为消息 - 在这种情况下消息不是加密的吗?我将研究这个基本身份验证。另一件不清楚的事情——如果我能以同样的方式保护 basicHttpBinding,我为什么要选择 wsHttpBinding? basicHttpBinding 不会给我更大的影响力吗?只要我可以对调用者进行身份验证,我不在乎什么技术在给我打电话。再次感谢,雷
    • 通过邮件安全,邮件正文被加密。你仍然需要一个证书,它也可以提供比 HTTPS 更慢的性能。主要用于消息在到达目标服务之前在多个中介之间转发的复杂场景。 wsHttpBinding 和基本 HttpBinding 都是 SOAP 绑定。 basic 仅支持基本 SOAP,但 wsHttpBinding 支持多个基于 SOAP 构建的 WS-* 协议,例如如果您不需要这些高级功能,可靠的消息传递等基本功能通常会为您提供更好的覆盖范围。不过,REST 会为您提供更广泛的覆盖范围......
    • 为迈克干杯。我有一些关于 basicHttpBinding 和 securityMode=Transport 的事情。我使用 sslDiag 做了一个自我证书。我想我的下一步是设置 clientCredentialType = Basic - 然后我看到客户端必须如何传递用户名。如果不是 Windows 用户,我如何在服务中拦截和验证它?谢谢雷
    • Dominic Baier 是 .Net 安全方面的知名专家,像往常一样,他在他的博客上发表了一篇精彩的文章:leastprivilege.com/…
    猜你喜欢
    • 1970-01-01
    • 2010-12-24
    • 2012-03-08
    • 2011-07-17
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多