GSSManager.createCredential如何获取Kerberos密钥和TGT?

时间:2016-03-21 15:47:55

标签: java kerberos spnego subject gss

我有以下情况: 我有一个服务器在Oracle数据库(使用Java SE 6)内运行,该数据库使用Apache HTTP客户端(Java)连接到Web服务。需要使用Kerberos保护Web服务,即使用SPNEGO身份验证。

我的服务器有一个Kerberos主体,随机密钥导出到密钥表,然后导入到数据库表中。 所以我有一个KerberosPrincipal,其中包含许多关联的KerberosKey对象(每个加密方法一个),我在主题中收集的所有信息。

我希望下一步是联系KDC以获取TGT并将其存储在主题中。我怎么做?我在此发现的所有文档都假定这发生在登录模块中,但我的方案中没有登录。或者下面会有人给我打电话给KDC吗?

现在我需要调用GSSManager.createCredential创建一个GSSCredential,我可以将其包装到我可以添加到HttpClientContext的KerberosCredentials和BasicCredentialsProvider中,这样HttpClient就可以进行SPNEGO身份验证。

但是如何将我的主题中的信息导入GSSCredential?

1 个答案:

答案 0 :(得分:1)

在网上挖了大约一个星期之后,我终于找到了答案here。 来自该文档的片段:

  1. 应用程序调用JAAS登录,然后调用已配置的Krb5LoginModule
  2. Krb5LoginModule从KDC或现有的票证缓存中为用户获取TGT(KerberosTicket),并将此TGT存储在主题的私有凭证集中
  3. 应用程序检索已填充的Subject,然后调用Subject.doAs / doAsPrivileged,它将此Subject放在执行ClientAction的线程的访问控制上下文中
  4. ClientAction调用GSSManager.createCredential方法,并在desiredMechs中传递Kerberos V5 OID。
  5. GSSManager.createCredential调用Kerberos V5 GSS-API提供程序,要求提供Kerberos凭据以启动安全上下文。
  6. Kerberos提供程序从当前访问控制上下文中获取Subject,并在其私有凭据集中搜索表示用户的TGT的有效KerberosTicket。
  7. 将KerberosTicket返回给GSSManager,GSSManager将其存储在GSSCredential容器实例中以返回给调用者。