我阅读了许多指定创建allowtgtsessionkey注册表项的解决方案,以便允许TGT会话密钥存储在LSA缓存中。请问我是否使用的是Windows 2012 R2或Windows 8,是否还需要创建此注册表项?使用java 7
更新:
我已经尝试过allowtgtsessionkey注册表项,但是当我从LSA缓存获取凭据并将其写入文件然后将其与kinit.exe(java)创建的文件进行比较时,似乎仍然存在一些基本信息丢失。
来自krb5cc_myuser的输出:
# strings krb5cc_myuser
SOME.EXAMPLE.DOMAIN
myuser
SOME.EXAMPLE.DOMAIN
myuser
SOME.EXAMPLE.DOMAIN
krbtgt
SOME.EXAMPLE.DOMAIN
SOME.EXAMPLE.DOMAIN
krbtgt
SOME.EXAMPLE.DOMAIN
:C:]|
"D+"
a(>&;
4 &dx
^ vp
okhd
bSxs
从Windows LSA版本输出字符串:
# strings krb5cc_encoded_ASN1
SOME.EXAMPLE.DOMAIN
krbtgt
SOME.EXAMPLE.DOMAIN
s*q0u
} +c
iV{P
+qwF
........
我没有看到" myuser"从缓存中获取的票证。
我正在使用此代码从LSA获取缓存。
try {
LoginContext lc = new LoginContext("SignedOnUserLoginContext");
lc.login();
Subject signedOnUserSubject = lc.getSubject();
Set<Object> privateCred = signedOnUserSubject.getPrivateCredentials();
for (Object privates : privateCred) {
if (privates instanceof KerberosTicket) {
KerberosTicket ticket = (KerberosTicket)privates;
return ticket.getEncoded();
}
}
}
任何人都可以提供建议吗?
感谢