2010-09-07 3 views
2

Je dois administrer les utilisateurs kerberos directement en Java (J2EE web-app). Comment puis-je faire l'équivalent de la commande kpasswd (ou kadmin) avec/sans extra lib? J'ai trouvé quelques API commerciales, mais ils sont très chers ...Comment changer les mots de passe kerberos en Java

Merci pour votre aide

Répondre

1

Pouvez-vous invoquer juste kpasswd de votre application?

String cmd = "kpasswd -principal foo -passwd bar"; 
Runtime rt = Runtime.getRuntime(); 
Process pr = rt.exec(cmd); 
pr.waitFor(); 
BufferedReader r = new BufferedReader(new InputStreamReader(pr.getInputStream())); 
String line = ""; 
while ((line=r.readLine()) != null) { 
    // TODO process response 
} 
r.close(); 
+0

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

+0

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

+0

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

4

Le Kerberos changement protocole de mot de passe a été mis en œuvre dans ApacheDS http://directory.apache.org/.

«Outre LDAP, il prend en charge Kerberos 5 et le protocole Change Password. »

C'est en Java, Open Source et Free comme dans la bière.

0

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

Questions connexes