2017-11-06 21 views
0

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のようなものがありますか?

+1

[Active DirectoryユーザーパスワードをJavaプログラムから変更する](https://stackoverflow.com/questions/15335614/changing-active-directory-user-password-from-java-program) – rkosegi

答えて

-2

通常、特権ユーザーとしてバインドし、そのユーザーを使用して他のユーザーのパスワードを変更します。特別なアクセス権を持たないユーザーは、おそらく匿名のバインドと検索を許可するため、ユーザーを見つけることができます。ユーザーのパスワードを変更するには、特権アカウントを使用する必要があります。

+1

ユーザーは自分のパスワードを変更することができます。 – EJP

0

疲れた研究の末、私は、LDAPサーバーのデフォルト構成に基づいて、codebraneの回答が正しいと判断しました。

期限が切れてもユーザーが自分のパスワードを変更できないようにする指示があることがわかりました。 (This documentは有効になっているかどうかを判断する方法を説明しています)

したがって、ユーザーが自分のパスワードを変更できるようにディレクティブを変更するか、そのような変更を行うために特権を持つ資格情報を使用します。

ありがとうございます!

関連する問題