Java Web Projectの中で、ユーザーが自分のLDAPパスワードを変更できるようにしようとしています(期限が切れているか、単にやりたいからです)。これらのユーザーには管理者権限がありません。Java with LDAP:管理者権限なしでユーザーのパスワードを変更しますか?
ユーザーを検索するための検索ができましたが、パスワードを変更できません。 ユーザーが管理者権限を付与しないで自分のLDAPパスワードを変更できるようにする方法はありますか?
DirContext context;
context = getInitialContext(username, password, ldapPath, ldapDomain);
// Set up search constraints
SearchControls cons = new SearchControls();
String[] attrIDs = { "cn" };
cons.setReturningAttributes(attrIDs);
cons.setSearchScope(SearchControls.ONELEVEL_SCOPE);
String USERS_OU = ldapPath.split("/")[ldapPath.split("/").length-1];
NamingEnumeration<?> results = context.search(USERS_OU, "sAMAccountName=[name]", cons); //I'm searching the sAMA for testing purposes
while (results.hasMore()) {
SearchResult result = (SearchResult) results.next();
Attributes attrs = result.getAttributes();
String userCN = attrs.get("cn").get(0).toString();
// Here I'm able to retrieve a user's CN
ModificationItem[] mods = new ModificationItem[2];
Attribute mod0 = new BasicAttribute("userPassword", password);
Attribute mod1 = new BasicAttribute("userPassword", newPass);
mods[0] = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, mod0);
mods[1] = new ModificationItem(DirContext.ADD_ATTRIBUTE, mod1);
context.modifyAttributes([CN + ldapPath], mods);
}
事前に感謝します:ここで
は、私が今持っているコードです!
UPDATE:rkosegiに印が付いていることを確認しましたが、OPが 'userPassword'ではなく 'unicodePwd'に変更しようとしていたため、解決策はここでは適用されないと思います。 'unicodePwd' ldapsになる。
私の研究で分かったことが1つあります。それは.NET上に特別な操作、DirectoryEntry.Invokeメソッドがあります。その1つに、管理権限を必要としない操作 'ChangePassword'があります。多分、Javaのようなものがありますか?
[Active DirectoryユーザーパスワードをJavaプログラムから変更する](https://stackoverflow.com/questions/15335614/changing-active-directory-user-password-from-java-program) – rkosegi