2

Java (J2EE Web アプリ) で kerberos ユーザーを直接管理する必要があります。追加のライブラリを使用して/使用せずに、kpasswd (または kadmin) コマンドと同等のことを行うにはどうすればよいですか? いくつかの商用 API を見つけましたが、非常に高価です...

ご協力ありがとうございました

4

3 に答える 3

4

Kerberos Change Password プロトコルは、ApacheDS http://directory.apache.org/に実装されています。

« LDAP の他に、Kerberos 5 と Change Password Protocol をサポートしています。»

ビールと同じように、Java、オープンソース、および無料です。

于 2012-10-12T14:07:59.887 に答える
1

アプリケーションから 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();
于 2010-09-07T13:14:49.333 に答える
0

ApacheDS の使用 - Maven:

<dependency>
    <groupId>org.apache.directory.server</groupId>
    <artifactId>kerberos-client</artifactId>
    <version>2.0.0-M21</version>
</dependency>

ジャワ:

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/ID/cat-kerberos-set-passwd-04.txt

于 2016-01-03T10:05:59.523 に答える