Troca de senha no AD

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);