2016-10-19 92 views
1

我有一个java客户端,它应该从LSA接收TGT票据以进行客户端服务器身份验证。所以不应该使用krbc_ {username}文件并将其删除。如果我用kinit.exe设置krbc_ {用户名},它会像预期的那样工作,但是之前所说的不是我的目标。但是,无法找到LSA Cache中的TGT。这是我在控制台中看到的。无法从LSA缓存中获取TGT票据

没有发现TGT在LSA

A码fragement。

 try { 
     LoginContext lc = new LoginContext("Client", new LibsCallbackHandler(userTicket)); 

     lc.login(); 
     Subject s = lc.getSubject(); 
     logger.info(s); 

在jaas.conf中,useTicketCache设置为true。如果我使用我正在使用的对话框登录,Userticket会被设置。如果我使用我的用户名和密码,我会收到一张新票,这张票很好,但不足以支持单一登录。我还在注册表中将'allowtgtsessionkey'设置为1。

回答

0

question应包含解决您的问题,让我们引用了答案:

删除当前用户名的文件夹中krb5cc *下的文件 C:\用户

您还需要设置一个注册表项,并引用:

也已将以下注册表值设置为1:

HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \控制\ LSA \ Kerberos的\参数

值名称:AllowTGTSessionKey

值类型:REG_DWORD

值:1

另一个问题是与票证keyType相关,您的应用程序将忽略具有不受支持的keyType的票证。 例如,我在LSA中输入了18型门票,但没有安装Java JCE扩展(来自Oracle),并不适用于Jaas。 为了支持更多种类的keyType,您需要安装Oracle Java JCE扩展(增加对AES> = 256 ..的支持)。 OpenJDK Java发行版支持所有keyType/AES,不需要扩展。

你也应该在一个完整的Kerberos调试模式下执行应用程序,它会提供有用的日志消息:

java -Dsun.security.krb5.debug=true -Dsun.security.jgss.debug=true -jar appname.jar