限制对内部WCF服务的访问

时间:2011-06-15 07:52:50

标签: wcf security

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

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

我们当前的想法: 我们已经启用了SSL,并且我们拥有服务器的公共证书。我们当前的计划是通过使用:clientCredentialType =“UserName”启用安全性,其中我们有一个自定义验证器,它只是检查我们定义的用户名/密码(非常像API密钥)。

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

  • 用户标准.NET基于角色的安全性PrincipalPermissionPrincipalPermissionAttribute。这样做的缺点是您必须对服务进行硬编码。只有定义的Windows组中的用户才能访问该服务
  • 使用ASP.NET角色提供程序可以预先使用前一种方法(未经WCF测试,但对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