wcf - 限制对内部 WCF 服务的访问

标签 wcf security

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

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

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

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

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

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

更新 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

关于wcf - 限制对内部 WCF 服务的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6354656/

相关文章:

wcf - WsDualHttpBinding 不回调客户端,及时处理问题

c# - jQuery AJAX 文件上传到 WCF Web 服务在大数据上失败

.net - 如何中止 HTTP 发布而不读取其完整内容(.NET REST 服务)

c# - 调试代码安全 .net 框架以使用 caspol.exe

asp.net - 在从 net.tcp 协议(protocol)连接到 WCF 的端点处监听的问题

c# - WCF 服务可以处理哪些数据类型?

django - 尝试使用 Redis 和随机 token 实现无密码身份验证

vb.net - 解码编码变量

linux - 在虚拟机 (VirtualBox) 上运行网络服务器 - 安全方面的优点/缺点

php - 如何清理字符串以避免 SQL 注入(inject)和最常见的攻击类型? (在 PHP 中)