1

我们的用户存储是一个名为 eDirectory 的 LDAP 服务器。如何使用 System.DirectoryServices.Protocols 更改用户密码?

4

4 回答 4

5

我使用与此类似的代码连接到基于 Sun One 的 LDAP 以更改用户密码。(应该与 Novell eDirectory 没有什么不同……)

using System.DirectoryServices.Protocols;
using System.Net;

//...

// Connect to the directory:
LdapDirectoryIdentifier ldi = new LdapDirectoryIdentifier("theServerOrDirectoryName");
// You might need to specify a full DN for "theUsername" (I had to):
NetworkCredential nc = new NetworkCredential("theUsername", "theOldPassword");
// You might need to experiment with setting a different AuthType:
LdapConnection connection = new LdapConnection(ldi, nc, AuthType.Negotiate);

DirectoryAttributeModification modifyUserPassword = new DirectoryAttributeModification();
modifyUserPassword.Operation = DirectoryAttributeOperation.Replace;
modifyUserPassword.Name = "userPassword";
modifyUserPassword.Add("theNewPassword");

ModifyRequest modifyRequest = new ModifyRequest("theUsername", modifyUserPassword);
DirectoryResponse response = connection.SendRequest(modifyRequest);
于 2009-10-12T07:52:25.040 回答
1

您需要删除密码,然后重新添加。当我这样做时,我使用了 Novell 的 LDAP 库。您可能必须使用 DirectoryEntry 才能使其正常工作。

从 eDirectory 中删除不可读的属性 - 通过 ADSI/System.DirectoryServices 的 LDAP


根据您在 eDirectory 中使用的密码类型,您可能会遇到问题

eDirectory 8.8 的 LDAP/通用密码


How to change eDirectory or Universal Password through LDAP here is an ldif sample

dn: cn=<myuser>,ou=<myou>,o=<myo>
changetype: modify
replace: userPassword
userPassword: <newPassWord>
于 2009-10-09T15:52:12.737 回答
1

我同意 Per Noalt 和 Matthew Whited 中的两个人的方法。但是有一个微妙的进口。

用户密码更改和管理密码更改之间存在差异。

如果您替换 userPassword,即更改管理员密码,并且根据密码策略,密码可能会立即过期。(eDir 使用密码到期,然后计算宽限登录)。

如果您提供旧密码和新密码,那么您正在执行用户发起的密码重置。

于 2011-08-25T01:02:16.530 回答
1

.net developer's guide to directory services programming一书中有一个代码示例,用于使用 System.DirectoryServices.Protocols 更改用户密码和管理密码更改。我假设出于版权原因我无法在此处粘贴代码示例,但如果您有兴趣使用 System.DirectoryServices.Protocols 和 System.DirectoryServices,我可以建议您购买这本书。

于 2015-10-09T07:14:53.750 回答