我有一个Java API,它与Kerberos服务器通信并执行各种操作。截至目前,我的API请求Kerberos服务器的不可更新票证。据我所知,jaas配置文件有一个选项可以将renewTGT选项设置为true,以便可以发出可更新的票证。然而,Jaas似乎在设置“renewUntil”时间方面有很多限制。谁能告诉我如何申请新的机票并控制其续订?基本上,有没有办法可以执行Java等效的操作:kinit -R?提前谢谢。
答案 0 :(得分:3)
从JDK7(1.7.0_55)开始,JAAS Krb5LoginModule
在提供身份验证时不提供任何请求可更新TGT的选项,因此目前使用JAAS无法实现。您可能能够实现此目的,但您需要直接使用内部Kerberos类,绕过JAAS。
在内部,Krb5LoginModule
使用提供的密码或keyTab实例化sun.security.krb5.KrbAsReqBuilder
以获取凭据。 KrbAsReqBuilder
有一个setOptions(KDCOptions options)
方法,但在登录模块中不会调用此方法。如果可以访问它,您可以调用KDCOptions#set(KDCOptions.RENEWABLE, true)
,如果KDC配置为允许可更新的票证,我会期望返回的票证可以更新。