ユーザー ストアは、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);
Per Noalt と Matthew Whited の 2 人のアプローチに同意します。しかし、重要な点が 1 つあります。
ユーザー パスワードの変更と管理者パスワードの変更には違いがあります。
userPassword を置き換える場合、これは管理者パスワードの変更であり、パスワード ポリシーによっては、パスワードがすぐに期限切れになる可能性があります。(eDir はパスワードの有効期限を使用し、次に猶予ログインのカウントを使用します)。
古いパスワードと新しいパスワードを提供する場合は、ユーザーが開始したパスワードのリセットを行っています。
パスワードを削除してから、再度追加する必要があります。これを行ったとき、Novell の LDAP ライブラリを使用しました。機能させるには、DirectoryEntry をいじる必要があるかもしれません。
ADSI/System.DirectoryServices を介した eDirectory - LDAP からの読み取り不可能な属性の削除
eDirectory で使用しているパスワードの種類によっては、問題が発生する可能性があります。
LDAP / eDirectory 8.8 のユニバーサル パスワード
LDAP を使用して eDirectory またはユニバーサル パスワードを変更する方法 は、ldif サンプルです。
dn: cn=<myuser>,ou=<myou>,o=<myo>
changetype: modify
replace: userPassword
userPassword: <newPassWord>