1

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

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

我希望下一步是联系 KDC 以获取 TGT 并将其存储在主题中。我怎么做?我在此找到的所有文档都假设这发生在登录模块中,但在我的场景中没有登录。或者以下人员之一会为我致电 KDC?

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

但是如何将我的主题中的信息获取到 GSSCredential 中?

4

1 回答 1

2

在网上搜索了大约一个星期后,我终于在这里找到了答案。该文档的片段:

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