【问题标题】:Restricting access to internal WCF services限制对内部 WCF 服务的访问
【发布时间】:2011-06-15 07:52:49
【问题描述】:

我们在 IIS 上的 asp.net 应用程序中托管了几个 WCF 服务。我们越来越多的服务用于内部通信(在我们自己的系统之间,客户端可以位于同一台服务器或其他服务器上)。现在我们需要通过某种方式来保护这些服务。

简而言之:目的是阻止其他人调用我们的服务。只有我们控制的应用程序才能与这些服务通信

我们目前的想法: 我们已经启用了 SSL,并且我们有服务器的公共证书。我们目前的计划是通过使用以下方式启用安全性:clientCredentialType="UserName" 我们有一个自定义验证器,它只检查我们定义的用户名/密码(很像 API 密钥)。

问题 #1:有没有更好的方法?这个场景听起来很简单,我觉得我们缺少一些明显的解决方案。

问题 #2:如果我们这样做,我们已经拥有的 SSL 证书是否足够,还是必须创建任何其他证书?

一些上下文:.net 4,IIS 7,我们可以访问服务器。客户端/服务可能位于不同的服务器上。

更新 1: 客户端可能位于完全不同的网络上。我们在其他地方托管了一些其他系统,它们也需要能够调用这些服务。

【问题讨论】:

    标签: wcf security


    【解决方案1】:

    据我了解,您的所有服务器/服务都在您的网络/Windows 域中,不是吗?在这种情况下,我不会使用UserName 身份验证。坚持使用 Windows 安全性和 HTTPS。

    要限制对您的服务的访问,您有几个选项都基于用于运行您允许的内部服务客户端的 Windows 帐户。将这些客户帐户分配给域组,然后您可以:

    • 用户标准 .NET 基于角色的安全性PrincipalPermissionPrincipalPermissionAttribute。这样做的缺点是您必须对服务进行硬编码授权。只有来自已定义 windows 组的用户才能访问该服务
    • 希望前一种方法(未经 WCF 测试,但在 ASP.NET 中可以很好地工作)与 ASP.NET 角色提供程序一起使用。在这种情况下,您可以在权限中使用自定义非 Windows 角色,并使用 AutorizationStoreRoleProvider (AzMan) 将域用户或域组映射到您的自定义角色。同样,它至少需要硬编码自定义角​​色的权限。
      How to use Authorization manager with ASP.NET 2.0
      How to use ASP.NET Role provider in WCF
    • 创建自定义 ServiceAuthorizationManager,您将在其中使用 windows 角色声明来授权用户。这种方法的优点是您可以通过配置添加授权管理器,因此您不必接触服务的任何代码。
      How to create custom AuthorizationManager for WCF service

    【讨论】:

    • +1 以获得好的答案。不幸的是,我的问题有点不清楚。一些客户端可能位于其他网络上。也许我不应该称它为“内部”,但我找不到更好的词。我用这些信息更新了问题。
    • 在这种情况下UserName 是必要的,您仍然可以将其与自定义授权管理器或角色提供程序结合使用。
    • 即使是其他网络上的客户端也可以使用 windows 帐户进行身份验证,但您必须使用基本身份验证。
    • 对不起,我离开了一段时间,没有时间测试它。我无法在 IIS 中为此项目启用 Windows 身份验证,因此我认为 userName 对我们来说是最好的。我们决定使用另一种解决方案,尽管它需要手动检查凭据。但是谢谢你的好答案。
    猜你喜欢
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    相关资源
    最近更新 更多