【发布时间】:2012-09-03 04:42:59
【问题描述】:
我在其中一个 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 的应用程序。我不希望长时间运行的服务在数据库重新连接尝试期间失败,这可能是由于网络故障等因素导致管道损坏。
【问题讨论】:
-
我们通过 JDBC 驱动程序使用 SQL Server 提供基于 Java 的服务(阅读 TIBCO BusinessWorks)。数据库团队不允许 sql server 身份验证。我们不能使用集成身份验证,因为 java 代码将在 AIX 机器上运行。选项是使用 kerberos。鉴于这些是长期运行的服务,我想确保在启动连接时(即尝试登录时)更新票证缓存。所以要求是(1)最初使用 kinit 并获得票证缓存(2)具有更新过期缓存的机制