【发布时间】:2019-11-08 00:20:48
【问题描述】:
我正在尝试从未加入域的计算机上运行我的密码更改应用程序。从加入域的机器运行时,代码运行良好。所以现在,我通过 SSL 使用直接 LDAP 连接连接到 AD。调用 changepassword 方法后,出现错误:
无法从域控制器读取配置信息,原因可能是机器不可用,或者访问被拒绝。 (来自 HRESULT 的异常:0x80070547)。
我正在使用有权更改用户密码的服务帐户建立连接并运行应用程序。
string adminUser = Domain + @"\" + AdminUserName;
string adminPass = AdminUserPassword;
string ldapString = LDAPString;
DirectoryEntry de = new DirectoryEntry(ldapString, adminUser, adminPass, AuthenticationTypes.Secure);
DirectorySearcher deSearch = new DirectorySearcher(de) { SearchRoot = de, Filter = "(&(objectCategory=user)(cn=" + userName + "))" };
SearchResult result = deSearch.FindOne();
if (result != null)
{
var adContext = new PrincipalContext(ContextType.Domain);
currentdc = adContext.ConnectedServer;
DirectoryEntry userEntry = result.GetDirectoryEntry();
if (userEntry != null)
{
userEntry.Invoke("ChangePassword", new object[] { OldPassword, NewPassword });
}
}
【问题讨论】:
-
...来自未加入域的机器 ...从加入域的机器运行时工作正常。您的域控制器似乎无法在您的域之外访问。您的异常表明您无法连接到 DC。您的问题与网络和基础设施相关..不是代码实现。
-
按照你这个问题的措辞,我有点惊讶你提出这个问题..你是不是想问别的?
-
同样的连接,我可以连接到DC,拉取用户属性值,只是修改密码没有通过。
-
你确定上面的异常是在
userEntry.Invoke上抛出的吗? -
绝对确定。
标签: c# asp.net active-directory ldap