我们的用户存储是一个名为 eDirectory 的 LDAP 服务器。如何使用 System.DirectoryServices.Protocols 更改用户密码?
4 回答
我使用与此类似的代码连接到基于 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);
您需要删除密码,然后重新添加。当我这样做时,我使用了 Novell 的 LDAP 库。您可能必须使用 DirectoryEntry 才能使其正常工作。
从 eDirectory 中删除不可读的属性 - 通过 ADSI/System.DirectoryServices 的 LDAP
根据您在 eDirectory 中使用的密码类型,您可能会遇到问题
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>
我同意 Per Noalt 和 Matthew Whited 中的两个人的方法。但是有一个微妙的进口。
用户密码更改和管理密码更改之间存在差异。
如果您替换 userPassword,即更改管理员密码,并且根据密码策略,密码可能会立即过期。(eDir 使用密码到期,然后计算宽限登录)。
如果您提供旧密码和新密码,那么您正在执行用户发起的密码重置。
.net developer's guide to directory services programming一书中有一个代码示例,用于使用 System.DirectoryServices.Protocols 更改用户密码和管理密码更改。我假设出于版权原因我无法在此处粘贴代码示例,但如果您有兴趣使用 System.DirectoryServices.Protocols 和 System.DirectoryServices,我可以建议您购买这本书。