如何通过 Kerberos 委派进行 LDAP 查询
How to do LDAP Query through Kerberos Delegation
客户同时拥有内部域和 DMZ 域。此时两个域之间不存在信任。我们有部署在 DMZ 区域的 Web 应用程序,因为该应用程序也与外部用户有一些交互。
- 来自内部域的内部用户需要能够通过 Kerberos 身份验证登录我们的 Web 应用程序,考虑到 Web 应用程序的应用程序池需要能够解密来自内部用户的服务票证,而应用程序是否可行池帐户来自 DMZ 域?
- 让我们假设 #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);
它将推断当前用户并尝试在幕后进行模拟。
客户同时拥有内部域和 DMZ 域。此时两个域之间不存在信任。我们有部署在 DMZ 区域的 Web 应用程序,因为该应用程序也与外部用户有一些交互。
- 来自内部域的内部用户需要能够通过 Kerberos 身份验证登录我们的 Web 应用程序,考虑到 Web 应用程序的应用程序池需要能够解密来自内部用户的服务票证,而应用程序是否可行池帐户来自 DMZ 域?
- 让我们假设 #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);
它将推断当前用户并尝试在幕后进行模拟。