我必須直接在Java(J2EE Web-app)中管理kerberos用戶。 我該怎麼做等效於kpasswd(或kadmin)命令帶/沒有額外的lib? 我發現了一些商業的API,但他們都非常昂貴...如何更改Java中的kerberos密碼
謝謝您的幫助
我必須直接在Java(J2EE Web-app)中管理kerberos用戶。 我該怎麼做等效於kpasswd(或kadmin)命令帶/沒有額外的lib? 我發現了一些商業的API,但他們都非常昂貴...如何更改Java中的kerberos密碼
謝謝您的幫助
你能只是從你的應用程序中調用kpasswd?
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();
Kerberos更改密碼協議已在ApacheDS http://directory.apache.org/中實施。
«除LDAP外,它還支持Kerberos 5和更改密碼協議。 »
它是在Java,開源和免費的在啤酒。
使用ApacheDS中 - 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());
}
你必須允許端口464(TCP或UDP,要看你用什麼協議)。
問題是,這將返回我KRB5_KPASSWD_MALFORMED所有的時間:( 錯誤代碼描述 - https://www.ietf.org/proceedings/50/I-D/cat-kerberos-set-passwd-04.txt
沒錯這就是一個錯字運行只是一個執行從Java命令的方式,因此,如果你想改變一個密碼,你可以調用適當的命令和參數,並在必要時處理輸出中的任何響應。 – locka 2010-09-07 13:34:00
謝謝你的回答。當我確定沒有別的辦法時,我會選擇你的解決方案,因爲從我的「kpasswd」應用程序導致一個棘手的過程,如 「調用kpasswd主體」,然後「輸入舊passwd」,然後「輸入新密碼」,然後「確認新密碼」,這在Java中不是很好 – BigMac 2010-09-07 13:55:55
另一個問題,我事實上,用戶必須能夠更改其他用戶的密碼,例如管理員。但是,「kpasswd」命令要求管理員未知的舊用戶密碼! – BigMac 2010-09-07 14:16:23