Как изменить пароль другого пользователя после аутентификации одного пользователя - PullRequest
0 голосов
/ 13 декабря 2011

Я успешно аутентифицировал одного пользователя. Теперь я хочу сменить пароль для другого пользователя. Мой первый пользователь такой же, как Admin, поэтому пароль других пользователей должен быть изменен или сброшен.

Я использую следующий код:

LdapContext ctx = null;     
Hashtable env = new Hashtable();            
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "username");
env.put(Context.SECURITY_CREDENTIALS, "password");
env.put(Context.PROVIDER_URL, "ldap://xx.xxx.xx.xxx:389");

ctx = new InitialLdapContext(env, null);     

final DistinguishedName dn = usernameMapper.buildDn(username);

final ModificationItem[] passwordChange = new ModificationItem[] 
{
    new ModificationItem(DirContext.REPLACE_ATTRIBUTE, 
                         new BasicAttribute(passwordAttributeName, newPassword))
};

ctx.modifyAttributes(dn, passwordChange);

System.out.println("Password changed successfully");
ctx.close();

поля атрибутов значения здесь:

 String passwordAttributeName = "userPassword";
 static LdapUsernameToDnMapper usernameMapper 
                      = new DefaultLdapUsernameToDnMapper("OU=DROID-TEST,DC=example,DC=com",
                                                          "cn");
 private String username = "test01";
 private String password = "test01";
 private String newPassword = "123";

Я получаю следующее исключение:

javax.naming.NoPermissionException: [LDAP: error code 50 - 00002098: SecErr: DSID-03150A48, problem 4003 (INSUFF_ACCESS_RIGHTS), data 0    

1 Ответ

2 голосов
/ 13 декабря 2011

NoPermissionException означает, что пользователь, с которым вы подключаетесь к LDAP, не имеет доступа для замены этого атрибута. Вы должны предоставить пользователю, с которым вы связываетесь, доступ более высокого уровня.

Кроме того, в зависимости от поставщика LDAP может потребоваться подключение через безопасное соединение ldaps, а не через базовое соединение ldap.

...