c# - 如何通过 Kerberos 委派进行 LDAP 查询
问题描述
客户同时拥有内部域和 DMZ 域。此时两个域之间没有信任。我们在 DMZ 区域部署了 Web 应用程序,因为该应用程序也与外部用户进行了一些交互。
- 来自内部域的内部用户需要能够通过 Kerberos 身份验证登录到我们的 Web 应用程序,考虑到 Web 应用程序的应用程序池需要能够解密来自内部用户的服务票证,而应用程序池帐户来自 DMZ领域?
- 假设 #1 是可能的,在内部用户登录后,我们需要对其他内部用户和组的人员选择器进行 LDAP 查询。在这里,我们想通过 Kerbeos 委托对内部域进行 LDAP 查询。只是想知道在这种情况下我们如何找到内部域控制器。有什么方法可以查询 GC 吗?还是我们应该在配置文件中配置它,或者我们可以从登录用户的 UPN 中获取?现在假设我们有内部域控制器地址,我们如何通过 Kerbeos 约束委派模拟登录的内部用户来进行查询?使用 C# DirectoryEntry 构造函数
public DirectoryEntry (string path, string username, string password, System.DirectoryServices.AuthenticationTypes authenticationType);
,我们可以提供一个 authenticationType 作为委托,尽管我仍然需要提供我没有的用户名和密码。
解决方案
场景 1 是可能的,但您必须手动编写代码才能通过直接调用 SSPI 来接受票证。
场景 2 理论上可以与无约束委派一起工作(也许),但这是非常不安全的。
您应该认真考虑创建单向信任并启用基于资源的约束委派。然后,您将使用仅包含路径的构造函数重载。
public DirectoryEntry (string path);
它将推断当前用户并尝试在幕后进行模拟。
推荐阅读
- vba - VBA中的验证规则来确定文本的长度
- powershell - 如何在不启用 WinRM 的情况下从 VMware Windows 来宾 VM 获取 CDROMDrive 信息?
- delphi - 为什么我尝试裁剪位图时出现空白 TImage?
- c# - Linq 返回分组结果
- image - Flutter CachedNetworkImageProvider 没有加载微调器
- javascript - 烧瓶熊猫到制表表都搞砸了
- python - 在 Python 中以不同字符串开头和结尾的字符串中查找字符串
- assembly - 引导加载程序。将字符串写入屏幕
- java - 从 CSV 文件解析不同类型的数据格式
- java - 使用hibernate管理多对多关系