【问题标题】:Which WCF security scenario should I use?我应该使用哪种 WCF 安全方案?
【发布时间】:2009-10-29 15:24:06
【问题描述】:

我是 WCF 的新手,对保护我的 WCF 服务的可用选项感到不知所措。最适合这种情况的安全模型是什么?

服务器: 必须有权访问在 IIS 6 上运行的特定公开可用的 ASP.Net 应用程序的上下文。但是,该服务应仅对 Intranet 上的单个客户端可用。基本上,服务需要在公共网站上进行操作,但服务本身应该对公众完全不可用。我想避免对服务使用 SSL。

客户: 在内部服务器上运行的 ASP.Net 内部网应用程序(与上述应用程序不同的机器,但也使用 IIS 6)。该服务将只有一个客户端。

代码看起来相当简单——我的服务合同在两个 ASP.Net 应用程序之间的共享库中。我需要很多帮助来弄清楚如何设置每个 web.config 以提供某种类型的安全性,以便对“服务器”应用程序的公共访问根本无法使用该服务,而“客户端”Web 应用程序具有完全受信任的访问权限到服务。

【问题讨论】:

  • 顺便说一句,由于 WCF 服务只有一个客户端,因此我不需要用户身份验证或任何类型的身份验证来区分有效用户。如果我可以将凭据存储在客户端和服务器之间的共享库中的代码中,或者类似的东西,那将是最简单的。

标签: asp.net vb.net wcf


【解决方案1】:

选项及其组合的数量确实是惊人的——这就是为什么微软和著名的 WCF 专家 Juval Lowy 都提出了“安全方案”,它应该可以帮助您专注于一些可能有用的、可管理的方案。

请参阅 J.D. Meier 的这篇博文了解 Microsoft 的方法,David Sackstein 的 blog post series 最好地总结了 Juval 的想法。

对于内部、企业内部的防火墙解决方案,最好的选择可能是具有传输级安全性和 Windows 凭据的 netTcpBinding

更新:不幸的是,netTcpBinding 只能在 IIS7/WAS(使用 Vista,Win Srv 2008)上使用,并且在 IIS6 上支持 :-(

对于这种情况,您要么需要使用一种 HTTP 绑定,要么自己为基于 NetTCP 的服务(控制台应用程序、NT 服务)创建主机。

马克

更新:

如果您想确保只有属于您的 Active Directory 域成员的本地用户才能访问您的服务,最好的办法是使用 Windows 凭据作为身份验证机制。在这种情况下,在您的域中没有 Windows 帐户的外部用户将无法使用该服务并被拒绝。

您可以使用 Windows 凭据为您的服务设置具有传输安全性的 basicHttpBinding 或 wsHttpBinding。如果您使用传输安全,您将使用 https:// 地址并且必须在您的网络上启用 SSL,但另一方面,您不需要使用证书来识别服务。

您的服务配置如下所示:

<bindings>
  <basicHttpBinding>
    <binding name="securedBasicHttp">
      <security mode="Transport">
        <transport clientCredentialType="Windows"/>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
<services>
  <service name="MyService">
    <endpoint name="Default"
              address="MyService"
              binding="basicHttpBinding"
              bindingConfiguration="securedBasicHttp"
              contract="IMyService" /> 
   </service>
</services>

Codeplex 上的 Patterns & Practice WCF Security Guidance 是获取更多信息和操作视频的好资源 - 非常棒,虽然有时有点让人不知所措。

您可能还想查看How-To articles on MSDN 的列表:

【讨论】:

  • 我已将服务器和客户端配置为使用 Sackstein 博客中针对 Intranet 场景的配置(使用 netTcpBinding)。我的客户收到错误消息:您尝试为不支持 .Net 框架的服务创建通道。您可能会遇到 HTTP 端点。 netTcpBinding 是否可以在 ASP.Net 应用程序中由 IIS 托管的服务上使用(这不是 Sackstein 的示例所做的)?
  • 啊,抱歉 - 不,NetTCP 只能托管在 IIS7(Vista、Srv2008)中或自托管在 NT 服务/控制台应用程序中。
  • 不幸的是,IIS6 只支持 HTTP 绑定 :-( 如果你对它没问题,最好的性能是 basicHttpBinding 绝对没有安全性;我通常建议不要这样做,但在 Intranet 中,你可能会接受这个选项。wsHttpBinding 更“重”并且携带更多的包袱,所以这可能不是你最好的选择。
  • 如果我在没有安全性的情况下使用basicHttpBinding,是不是任何人都可以通过公开网站访问该服务的方法?在我所描述的情况下,该服务托管在公共 ASP.Net Web 应用程序中,即使我只希望 Intranet 用户能够访问该服务。
  • 有没有例子说明如何在不使用证书的情况下在某处设置 wsHttpBinding?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-20
  • 2017-12-28
相关资源
最近更新 更多