问题描述
我正在编写一个Java程序,以访问Kerberos集群上的安全HBase。我的理解是,我可以通过两种方式做到这一点:
在我决定应该采用哪种方法之前,我想了解两种选择的利弊。我在Google上找到了this article,它解释了这两种方法的工作原理。这篇文章还指出,可以通过调用checkTGTAndReloginFromKeytab
来更新keytab中的TGT,但并未讨论用于更新kinit缓存的TGT的更新过程,但我认为可以使用jaas config中的renewTGT
属性来完成(如果我错了,请纠正我)。这篇文章的另一点是,kinit缓存仅适用于运行时间短的应用程序,因为我们无法在7天后续订TGT。
我倾向于使用缓存方法,因为我可以安全地将用户名和密码保留在密钥库中,而不必担心保护密钥表的安全。但是这种方法的局限性如前所述,即TGT的最大长度(7天),我不能将其用于长时间运行的工作,至少这是我的理解(纠正我的意思)。
如果您可以解释两者之间的区别,或者为我提供一篇很好的文章,其中详细介绍了这两种方法,那将非常有帮助。
public static LoginContext kinit() throws LoginException {
return new LoginContext("Client",callbacks -> {
for(Callback c : callbacks){
if(c instanceof NameCallback)
((NameCallback) c).setName(username);
if(c instanceof PasswordCallback)
((PasswordCallback) c).setPassword(password);
}
});
}
public static void connectToKerberizedHBase(Configuration conf) throws LoginException,IOException {
UserGroup@R_587_404[email protected]figuration(conf);
LoginContext lc = kinit();
lc.login();
UserGroup@R_587_404[email protected](lc.getSubject());
}
按如下所述使用它
somemethod(){
Configuration config = HBaseConfiguration.create();
loadHBaseConfigsFromProperties(config);//to load zookeeper quorum,port etc...
connectToKerberizedHBase(config);
}
JAAS配置文件:
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=false
renewTGT=true
useTicketCache=true;
};
上面提到的文章还讨论了我不理解的使用keytab的代表,因此请帮助我了解这是否适合为长期运行的工作创建连接?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)