ApacheDS Utilisation - Maven:
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>kerberos-client</artifactId>
<version>2.0.0-M21</version>
</dependency>
Java:
KdcConfig config = KdcConfig.getDefaultConfig();
config.setHostName("ldap.server.cz");
config.setUseUdp(false);
Set<EncryptionType> enct = new HashSet<EncryptionType>();
enct.add(EncryptionType.AES256_CTS_HMAC_SHA1_96);
config.setEncryptionTypes(enct);
KdcConnection conn = new KdcConnection(config);
ChangePasswordResult res = conn.changePassword(userPrincipal, userPassword, "NewPassword");
if (res.getCode().compareTo(ChangePasswordResultCode.KRB5_KPASSWD_SUCCESS) == 0) {
System.out.println("Password was changed!");
} else {
System.out.println("Password change error - " + res.getCode().name());
}
Vous devez autoriser le port 464 (ou udp tcp, dépend de ce protocole que vous utilisez).
Le problème est que cela me retourne KRB5_KPASSWD_MALFORMED tout le temps :( Codes d'erreur Description -.. https://www.ietf.org/proceedings/50/I-D/cat-kerberos-set-passwd-04.txt
ouais c'est une faute de frappe Runtime est juste une façon d'exécuter une commande à partir de Java, donc si vous voulez changer mot de passe, vous pouvez simplement appeler la commande et les arguments appropriés et, si nécessaire, traiter n'importe quelle réponse dans la sortie – locka
Je vous remercie de votre réponse, je choisirai votre solution quand je suis sûr qu'il n'y a pas d'autre moyen, puisque j'appelle "kpasswd" app conduit à un processus délicat comme "invoquer kpasswd principal" puis "entrer ancien mot de passe" puis "entrer nouveau mot de passe" puis "confirmer nouveau mot de passe" qui n'est pas très agréable en Java – BigMac
L'autre problème i s le fait qu'un utilisateur doit être capable de changer le mot de passe d'un autre utilisateur, comme un admin. Cependant, la commande "kpasswd" demande le mot de passe de l'ancien utilisateur, inconnu par l'administrateur! – BigMac