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?
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=newModificationItem[4];//Replace the "unicdodePwd" attribute with a new value//Password must be both Unicode and a quoted stringStringoldQuotedPassword="\""+oldPassword+"\"";byte[]oldUnicodePassword=oldQuotedPassword.getBytes("UTF-16LE");StringnewQuotedPassword="\""+newPassword+"\"";byte[]newUnicodePassword=newQuotedPassword.getBytes("UTF-16LE");mods[0]=newModificationItem(DirContext.REMOVE_ATTRIBUTE,newBasicAttribute("unicodePwd",oldUnicodePassword));mods[1]=newModificationItem(DirContext.ADD_ATTRIBUTE,newBasicAttribute("unicodePwd",newUnicodePassword));mods[2]=newModificationItem(DirContext.REPLACE_ATTRIBUTE,newBasicAttribute("pwdLastSet","-1"));mods[3]=newModificationItem(DirContext.REPLACE_ATTRIBUTE,newBasicAttribute("scriptPath",null));// Perform the updatectx.modifyAttributes(userName,mods);
rockstorm
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
Rafael_Nunes
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
Stringkeystore="//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 authenticationenv.put(Context.SECURITY_AUTHENTICATION,"simple");env.put(Context.SECURITY_PRINCIPAL,userName);env.put(Context.SECURITY_CREDENTIALS,oldPassword);//specify use of sslenv.put(Context.SECURITY_PROTOCOL,"ssl");//connect to my domain controllerStringldapURL="ldap://localhost:636";env.put(Context.PROVIDER_URL,ldapURL);