java - GSSManager.createCredential 如何获取 Kerberos key 和 TGT?

标签 java kerberos spnego subject gss

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

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

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

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

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

最佳答案

在网上搜索了大约一周后,我终于找到了答案here 。 该文档的片段:

  1. 应用程序调用 JAAS 登录,JAAS 登录又调用配置的 Krb5LoginModule
  2. Krb5LoginModule 从 KDC 或现有票据缓存中获取用户的 TGT (KerberosTicket),并将该 TGT 存储在主题的私有(private)凭证集中
  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 提供程序从当前访问控制上下文中获取主题,并在其私有(private)凭据集中搜索代表用户 TGT 的有效 KerberosTicket。
  7. KerberosTicket 返回给 GSSManager,GSSManager 将其存储在 GSSCredential 容器实例中以返回给调用者。

关于java - GSSManager.createCredential 如何获取 Kerberos key 和 TGT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36135630/

相关文章:

Tomcat 无法使用 spnego 进行身份验证, "Cannot locate default realm"

java - 使用 hibernate 禁用属性/集合加载

asp.net 通过 kerberos 集成 windows 身份验证到 sql server

apache-spark - Spark on YARN + Secured hbase

hadoop - QlikView 和 Hadoop 与 Kerberos 在同一台服务器上

java - 无法解决 Classnotfound 异常

java - setOnClickListener 在简单的 Android 中不起作用

java - 为什么我的计划作业没有并行执行

java - Java 面试后的反射(reflection) : Inheritance and polymorphism

java - 我如何使用 Spnego/Kerberos 和 Apache 的 HttpClient 进行身份验证?