【问题标题】:How does GSSManager.createCredential get the Kerberos key and TGT?GSSManager.createCredential 如何获取 Kerberos 密钥和 TGT?
【发布时间】:2016-03-21 15:47:55
【问题描述】:

我有以下情况: 我有一个在 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 身份验证。

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

【问题讨论】:

    标签: java kerberos spnego subject gss


    【解决方案1】:

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

    1. 应用程序调用 JAAS 登录,进而调用配置的 Krb5LoginModule
    2. Krb5LoginModule 从 KDC 或现有票证缓存中为用户获取 TGT (KerberosTicket),并将此 TGT 存储在主题的私有凭据集中
    3. 应用程序检索填充的 Subject,然后调用 Subject.doAs/doAsPrivileged 将这个 Subject 置于执行 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 容器实例中,然后返回给调用者。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 2011-09-02
      • 2017-05-09
      相关资源
      最近更新 更多