Boa tarde.
Estou precisando de uma ajuda.
Preciso trocar a senha de um usuario no AD Já pesquisei em vários sites mas a maioria utiliza um usuário “master” para efetuar a senha de um outro usuário.
O que eu preciso fazer é que o próprio usuario troque a sua senha via JAVA. Alguma recomendação?
grato
Independente quem faça, o que você vai ter de fazer é um REPLACE_ATTRIBUTE.
O que você pode no máximo fazer é verificar se o usuário sabe qual a senha antiga dele para depois então você permitir a troca da senha:
Exemplo de troca:
ModificationItem[] mods = new ModificationItem[4];
//Replace the "unicdodePwd" attribute with a new value
//Password must be both Unicode and a quoted string
String oldQuotedPassword = "\"" + oldPassword + "\"";
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));
mods[2] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("pwdLastSet", "-1" ));
mods[3] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("scriptPath", null));
// Perform the update
ctx.modifyAttributes(userName, mods);
Oá Rafael.
O meu maior problema é com a conexão. Em muitos lugares dizem que para efetuar a troca é necessário uma conexão SSL.
Voce poderia me assa um exemplo de conexão para o codigo abaixo?
grato.
Wanderley
Você provavelmente vai ter de importar o certificado do AD para seu keystore.
A conexão no AD com SSL é a través da porta 636.
A senha deve ser um Unicode de 16bits
String keystore = "//Program Files/Java/j2re1.5/lib/security/cacerts";
System.setProperty("javax.net.ssl.trustStore",keystore);
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
//set security credentials, note using simple cleartext authentication
env.put(Context.SECURITY_AUTHENTICATION,"simple");
env.put(Context.SECURITY_PRINCIPAL,userName);
env.put(Context.SECURITY_CREDENTIALS,oldPassword);
//specify use of ssl
env.put(Context.SECURITY_PROTOCOL,"ssl");
//connect to my domain controller
String ldapURL = "ldap://localhost:636";
env.put(Context.PROVIDER_URL,ldapURL);