C# 如何通过Kerberos委托进行LDAP查询

C# 如何通过Kerberos委托进行LDAP查询,c#,ldap,kerberos,kerberos-delegation,C#,Ldap,Kerberos,Kerberos Delegation,客户同时拥有内部域和DMZ域。此时,两个域之间没有信任关系。我们在DMZ区域部署了web应用程序,因为该应用程序也与外部用户进行了一些交互 来自内部域的内部用户需要能够通过Kerberos身份验证登录到我们的web应用程序,考虑到web应用程序的应用程序池需要能够解密来自内部用户的服务票证,而应用程序池帐户来自DMZ域,这是否可能 假设#1是可能的,在内部用户登录之后,我们需要对其他内部用户和组上的人员选择器执行LDAP查询。在这里,我们希望通过Kerbeos委托对内部域进行LDAP查询。只是想

客户同时拥有内部域和DMZ域。此时,两个域之间没有信任关系。我们在DMZ区域部署了web应用程序,因为该应用程序也与外部用户进行了一些交互

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

  • 场景1是可能的,但您必须通过直接调用SSPI手动编码以接受票据

    场景2在理论上可以与无约束的委托(也许)一起工作,但这是难以置信的不安全

    <>您应该认真考虑创建单向信任并启用基于资源的受限委托。然后使用只包含路径的构造函数重载

    publicdirectoryentry(字符串路径);
    

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

    场景1是可能的,但您必须手动编写代码,通过直接调用SSPI来接受票据。场景2在理论上可以与无约束的委托(也许)一起工作,但这是难以置信的不安全。您应该认真考虑只创建单向信任并启用基于资源的受限委托。谢谢@史提夫。如果可以创建一个基于资源的受约束的委托,我们只想知道如何使用DirectoryEntry在代码级别这样做。我在这里没有找到指定正确客户端用户令牌的方法。您可以使用只包含路径的构造函数重载。它将推断当前用户并尝试在幕后模拟。明白了,谢谢@Steve顺便说一句@Steve,只是想知道您是否想将您的评论转换为答案以结束此问题。如果没有,我可以根据你的建议在这里写下答案。我无法就答案给出可靠的例子,因为我们可能不会这样做,而且很可能不会。再次感谢。