У меня следующая проблема. Я попытался изменить пароли от пользователей AD с учетной записью администратора через JNDI успешно. Проблема в том, что теперь у меня нет этого доступа администратора.
Единственное, что я хочу использовать, это функция смены пароля, это изменение пароля пользователя после его истечения.
Можно ли изменить пароль пользователя с его собственными учетными данными (имя пользователя и старый пароль), даже если срок их действия истек с использованием JNDI? И если это возможно, что мне делать в моем коде?
Это мой текущий код
public String changePassword(String username, String password, String newPassword)
{
Hashtable env = new Hashtable();
String domain = (String) context.getBean("domain");
String base = (String) context.getBean("base");
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, username + domain);
env.put(Context.SECURITY_CREDENTIALS, password );
env.put(Context.PROVIDER_URL,context.getBean("url"));
env.put(Context.SECURITY_PROTOCOL, "ssl");
try {
// Create the initial directory context
LdapContext ctx = new InitialLdapContext(env,null);
ModificationItem[] mods = new ModificationItem[2];
String oldQuotedPassword = "\"" + password + "\"";
byte[] oldUnicodePassword = oldQuotedPassword.getBytes("UTF-16LE");
String newQuotedPassword = "\"" + newPassword + "\"";
byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16LE");
mods[0] = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, new BasicAttribute("unicodePwd", oldUnicodePassword));
mods[1] = new ModificationItem(DirContext.ADD_ATTRIBUTE, new BasicAttribute("unicodePwd", newUnicodePassword));
ctx.modifyAttributes("cn=" + username + ',' + base, mods);
ctx.close();
return "Changed Password for: " + username;
}
catch (NamingException e) {
return new String ("Problem changing password: " + e);
}
catch (UnsupportedEncodingException e) {
return new String("Problem encoding password: " + e);
}
}
Если нет, я мог бы также использовать Spring LDAP. Там это могло быть возможно? Как? Спасибо заранее и извините, если я не очень хорошо объяснил себя, это мой первый пост здесь