我的应用程序通过 LDAP(通常是 Active Directory)定义授权用户:
我遇到过两个 Active Directory 相互信任的情况,并且 TreeA 中指定的 GroupA 包含来自 TreeB 的用户。所以第 2 步失败了,因为我正在尝试针对 TreeA 对 UserB(来自 TreeB)进行身份验证。
该应用程序可以访问 TreeA,所以我想它可以查看 GroupA 并在那里看到 UserB。但是它怎么知道它需要向 TreeB 发送绑定(bind)请求来验证用户名和密码呢?
有没有更好的方法来解决这个问题?
由于存在信任关系,因此对 TreeA 的此类绑定(bind)请求是否应该自动转发给 TreeB?
最佳答案
可能是您在 LDAP 服务器 (TreeA) 上遇到了配置问题。您写道,TreeA 和 TreeB 之间存在信任,因此您可以将 UserB(来自 TreeB)添加为 TreeA 中 GroupA 的成员。如果你能做到这一点,那么你已经成功地在 TreeA 和 TreeB 之间建立了正确方向的信任。您应该理解,这种信任仅意味着 Active Directory B 仅验证用户密码,但默认情况下 UserB 将无权访问 Active Directory A 中的任何资源。 UserB 无权将 LDAP 绑定(bind)到服务器 A。在这种情况下,问题将通过授予 UserB 对服务器 A 的远程登录权限和对 GroupA 的读取权限以及可能对 GroupA 所在的 OU 的读取权限来解决。你可以试试Insight for Active Directory监控 AD 访问以定位权限问题。
您的问题的其他可能原因可能是您用于 LDAP 访问的 API 的使用。在您的问题中,您没有写任何有关 API 的信息。你使用 Win32 API 像 ldap_bind_s或使用 DirectoryEntry在.NET 中?在这两种情况下,您要么在绑定(bind)期间显式使用域名和帐户名(对于 UserB),要么使用 null
,这可能很重要。用于用户当前用户凭据的名称和密码。
使用 TreeA 的固定帐户对 TreeA 的所有访问(也用于对 UserB 的测试)也可以解决问题,但它可能只是某种应用程序使用。
无论如何,您的问题中的更多信息可以缩小问题和解决问题的方法。
关于authentication - 跨受信任域的 LDAP 用户身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5051381/