多个域的Active Directory身份验证WCF服务 - 如何?

时间:2009-11-11 13:34:15

标签: .net wcf active-directory

我正在开发一个WCF服务(不是外部可用的),它将针对我们的.NET 2.0 WinForm应用程序的用户在两个域中对Active Directory进行身份验证。身份验证部分主要工作,但我在修改Active Directory时遇到一些问题。以下是有关情况和要求的基础知识。

  1. 我们应用程序的一些外部用户将登录我们DMZ内不同域的Citrix服务器。这必须是他们必须输入证书的唯一时间。因此,必须接受该域中经过身份验证的用户已经过身份验证,并根据用户ID加载应用程序权限。
  2. 在DMZ域和我们的内部域之间建立了单向信任关系。
  3. 大多数外部用户在其计算机上安装该应用程序。我们使用.NET远程处理从应用程序连接到我们的服务器。身份验证是用户ID /密码,通过远程处理存储在我们域上的SQL Server中的信息。
  4. 在我们的域中,内部用户将处于类似情况。他们将启动应用程序,无需输入任何凭据,假设他们已登录。
  5. 所有用户 - 无论是否使用Active Directory - 仍然在我们的表中设置,这是我们的权限管理信息的存储位置。用户表上有一个标志,指示用户是否为AD,以及表示其域和AD用户ID的字段(如果与原始用户ID不同)。
  6. 如果用户在Active Directory中设置,无论是在外部域还是内部域中,如果他们运行安装在当前不在域中的计算机上的应用程序(即,从路上的笔记本电脑),他们将是针对Active Directory进行身份验证。处理#2中的身份验证的远程对象连接到WCF服务以进行身份​​验证。
  7. 这同样适用于我们网站的用户(使用相同的凭据)。如果它们被标记为Active Directory用户,则会对其进行身份验证,而不是针对我们的正常系统。
  8. 一些拥有正确权限的内部用户需要能够在Active Directory中设置用户,修改它们,解锁它们并启用/禁用它们 - 仅在外部域中。
  9. 我遇到的主要问题是:

    1. WCF服务应该在哪个域:外部或内部?
    2. 该服务应运行哪些用户才能完成上述所有操作,即External \ SVC-ADAuthentication,Internal \ SVC-ADAuthentication,还是其他什么?
    3. 从我的测试开始:

      1. 当我在External作为External \ SVC-ADAuthentication运行服务时,我可以修改AD信息并对外部域进行身份验证。针对“内部”域的身份验证失败,并显示“已从服务器返回引用”
      2. 外部作为内部\ SVC-AD身份验证:我可以针对这两个域进行身份验证,但我无法修改外部域上的用户。
      3. 内部作为内部\ SVC-AD身份验证:我只能针对内部域进行身份验证。
      4. 内部作为外部\ SVC-ADAuthentication:不会运行(我假设因为单向信任关系)。

1 个答案:

答案 0 :(得分:0)

如果从原则角度来看问题。

  • 您不希望外部域能够访问内部域。
  • 内部域可以访问外部域。

因此,您需要在内部域和外部域之间创建单向信任。

将外部用户可以访问的所有服务放在外部域中。