如何通过 Kerberos 委派进行 LDAP 查询

How to do LDAP Query through Kerberos Delegation

客户同时拥有内部域和 DMZ 域。此时两个域之间不存在信任。我们有部署在 DMZ 区域的 Web 应用程序,因为该应用程序也与外部用户有一些交互。

  1. 来自内部域的内部用户需要能够通过 Kerberos 身份验证登录我们的 Web 应用程序,考虑到 Web 应用程序的应用程序池需要能够解密来自内部用户的服务票证,而应用程序是否可行池帐户来自 DMZ 域?
  2. 让我们假设 #1 是可能的,在内部用户登录后,我们需要对其他内部用户和组的人员选择器进行 LDAP 查询。在这里,我们想通过 Kerbeos 委托对内部域进行 LDAP 查询。只是想知道在这种情况下我们如何找到内部域控制器。有什么方法可以为此查询 GC?或者我们应该让它在配置文件中配置,或者我们可以从登录用户的 UPN 获取?假设现在我们有了内部域控制器地址,我们如何通过 Kerbeos 约束委派模拟登录的内部用户来进行查询?使用 C# DirectoryEntry Constructor public DirectoryEntry (string path, string username, string password, System.DirectoryServices.AuthenticationTypes authenticationType); 我们可以提供一个 authenticationType 作为 Delegation,尽管我仍然需要提供我没有的用户名和密码。

情况 1 是可能的,但您必须手动编写代码以通过直接调用 SSPI 来接受工单。

方案 2 理论上可以使用不受约束的委托(也许),但这是非常不安全的。

您应该认真考虑只创建一种单向信任并启用基于资源的约束委派。然后,您将使用仅包含路径的构造函数重载。

public DirectoryEntry (string path);

它将推断当前用户并尝试在幕后进行模拟。