Java Kerberos 票证更新 TGT

标签 java kerberos

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

虽然我已经提到了 renewTGT=true,但当票证过期时,代码会抛出异常。我已在 Windows 注册表中将 allowedtgtsessionkey 值设置为 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 的应用程序。我不希望长时间运行的服务在数据库重新连接尝试期间失败,这可能是由于网络故障等因素导致管道损坏而发生的。

最佳答案

你走错路了。首先,您应该使用 LoginContext 来获取凭据,而不是直接与 Kerberos 5 交互。其次,非人类访问需要 key 表。这相当于 TGT。导出服务器的 Keytab 并修改 Krb5LoginModule 配置。 This教程会对您有所帮助。

关于Java Kerberos 票证更新 TGT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12242085/

相关文章:

java - 文本未保存到字符串变量

java - GWT 项目在开发模式下正确读取属性文件,但在部署时找不到它

tomcat - Apache tomcat 的 Kerberos SSO 异常

authentication - 通过 IP 地址访问站点时 Kerberos 失败

java - 如何通过 OSGI 包中的 kerberos 与 hdfs 连接

java - 文档相似度

java - 在另一个 JSP 中包含相同的 JSP 文件两次

java - 关于Java中的String对象和按值传递

google-chrome - Chrome 更新后 Kerberos SSO 停止工作

apache - 使用 SPNEGO/Kerberos 和委派的 Tomcat 身份验证