gpt4 book ai didi

c# - 从远程计算机简单绑定(bind)到 AD-LDS 失败

转载 作者:行者123 更新时间:2023-11-30 12:58:20 24 4
gpt4 key购买 nike

我正在使用 API System.DirectoryServices.AccountManagement 绑定(bind)到 AD-LDS 实例。我正在对 AD-LDS 实例中本地存在的用户使用简单绑定(bind)。当我在托管 AD-LDS 的服务器上运行客户端时它可以工作,但当我在远程计算机上运行客户端时它不起作用。

这是我用来绑定(bind)和搜索用户的代码:

var c = new PrincipalContext(ContextType.ApplicationDirectory, "fullhostname:50001", "CN=Users,DC=app,DC=local", ContextOptions.SimpleBind, "CN=joe,CN=Users,DC=app,DC=local", "abc");
var u = UserPrincipal.FindByIdentity(c, IdentityType.Name, "john");

这是我在远程计算机上运行时抛出的异常:

System.DirectoryServices.AccountManagement.PrincipalServerDownException: The server is not operational.
---> System.Runtime.InteropServices.COMException: The server is not operational.
at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
at System.DirectoryServices.DirectoryEntry.Bind()
at System.DirectoryServices.DirectoryEntry.get_AdsObject()
at System.DirectoryServices.DirectoryEntry.get_Options()
at System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInit()
--- End of inner exception stack trace ---
at System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInit()
at System.DirectoryServices.AccountManagement.PrincipalContext.DoApplicationDirectoryInit()
at System.DirectoryServices.AccountManagement.PrincipalContext.Initialize()
at System.DirectoryServices.AccountManagement.PrincipalContext.get_ConnectedServer()
at MyApplication.DiagnosticsController.TryAdLdsSettings(AdLdsData data) in C:\code\MyApplication\DiagnosticsController.cs:line 166

如果我改为使用 System.DirectoryServices API,它也可以在远程计算机上工作:

var obj = new DirectoryEntry("LDAP://fullhostname:50001/CN=Users,DC=app,DC=local", "CN=joe,CN=Users,DC=app,DC=local",
"abc", AuthenticationTypes.None);
obj.RefreshCache();

这可行,但我需要改用 System.DirectoryServices.AccountManagement API。

谁知道哪里出了问题?

最佳答案

通过一些小的改动,我能够让它在一个域上运行,我希望这些提示能有所帮助。

  1. 创建 PrincipalContext 时的倒数第二个参数 "CN=joe,CN=Users,DC=app,DC=local" 应该是完全限定的用户名,而不是LDAP 路径;这通常看起来像 COMPUTER-NAME\\joe(不管你的计算机是什么名字)或者如果你和我一样在域中,DOMAIN-NAME\\joe。 (如果 fullhostname 不是您的本地工作站,那么您可能在域中,或者您可能需要指定 fullhostname\joe 以请求针对主机服务器而不是您本地的身份验证,因为您本地的凭据可能无法在主机上工作服务器)。

  2. 为了在域上进行测试,我必须将第一个参数从 ContextType.ApplicationDirectory 更改为 ContextType.Domain;听起来您不在域中,因此您可能需要 ContextType.ApplicationDirectory,但错误消息让我认为 Active Directory 服务未运行。

  3. 由于 :50001 足够高,可以被阻止,请确保您没有阻止请求的防火墙软件,无论是从您的计算机传出还是传入“全主机名” “机器;当然,还要确保您的事件目录服务在 50001 上实际可用,而不是其他一些身份验证协议(protocol)。

关于c# - 从远程计算机简单绑定(bind)到 AD-LDS 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30194369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com