Java Kerberos票证更新TGT

时间:2012-09-03 04:43:00

标签: java kerberos

我在其中一个POC中使用Krb5LoginModule。我提供了useDefaultCache = true和renewTGT = true。

虽然我已经提到renewTGT = true,但是当故障单过期时代码会抛出异常。我在windows注册表中设置了allowtgtsessionkey值为1(我正在运行XP SP2)。 KDC(ActiveDirectory)设置是默认设置。机票寿命= 10小时,续订请求阈值= 7天。

源代码

import java.util.HashMap;
import java.util.Map;
import javax.security.auth.Subject;
import com.sun.security.auth.module.Krb5LoginModule;

public class Temp3 {
    public static void main(String[] args) throws Exception {
        System.setProperty("sun.security.krb5.debug", "true");

        Subject subject = new Subject();

        Krb5LoginModule krb5 = new Krb5LoginModule();

        Map <String, String> map = new HashMap <String, String>();
        map.put("useTicketCache", "true");
        map.put("doNotPrompt", "true");
        map.put("renewTGT", "true");
        map.put("debug", "true");

        krb5.initialize(subject, null, null, map);
        krb5.login();
        krb5.commit();
        System.out.println(subject);
    }
}

当故障单未到期时代码正常工作,即我在运行上述代码的10小时内运行kinit的时间。

我编写了这个POC,因为我必须使用SQL Server驱动程序(版本4.0)运行基于JDBC的应用程序。我不希望长时间运行的服务在数据库重新连接尝试期间失败,这可能是由于诸如网络故障导致管道损坏等因素而发生的。

1 个答案:

答案 0 :(得分:2)

你走错了路。您应该使用LoginContext来获取凭据,而不是直接与Kerberos 5交互。其次,非人类访问需要一个关键选项卡。这相当于TGT。导出服务器的Keytab并修改Krb5LoginModule配置。 This教程将为您提供帮助。