【问题标题】:Postdatable Kerberos tickets in JavaJava 中的可发布 Kerberos 票证
【发布时间】:2013-01-17 18:22:58
【问题描述】:

我的 Java 应用程序中需要一个 postdatable Kerberos ticket。但是我在GSSContext接口中没有找到任何方法。 Java 不支持这个 Kerberos 功能吗?

目的如下: 在我们的应用程序中,用户可以设置将在未来一段时间运行的批处理。并且应用服务器将不得不使用在批次执行时有效的委托票证,而原始票证可能已过期。

编辑:澄清我的第一个声明:我发现GSSContextGSSContextImpl 以及GSSContextImpl 不能访问仅在Krb5Context 中可用的setAuthTime() 方法。在没有深入研究所有细节的情况下,似乎只能通过对未记录类的某些直接访问来实现后验身份验证。

由于在让客户端浏览器发送带有正确标志的票证方面似乎存在其他问题 - 正如@Michael-O 指出的那样 - 我想我将不得不找到另一个解决方案,也许只是询问用户用户名和密码,将它们与批处理加密保存,然后在批处理开始时请求新票证。

延期票的概念听起来很适合我的问题,但似乎缺乏实际用途,导致现有环境无法很好地支持它。

【问题讨论】:

  • 弗兰克,你真的读过RFC4120的第2.4章吗?来自客户端的 TGT 必须具有初始标志 MAY-POSTDATE。请先检查一下。是的,Java GSS 支持,但我自己没有尝试过。请参阅this 搜索。
  • 好点!由于客户端是浏览器,可能我无法影响它的票证设置。
  • 我已经在 Ubuntu 下检查了kinit,我可以设置票证的开始日期 (TGT) => 可发布日期。我还使用 kerbtray 检查了我的 Windows 凭据缓存,并且 TGT 不是 MAY-POSTDATE。据我所知,由于 SSPI 使用这个给定的 TGT,并且您不能拥有一个过时的转发 TGT。您应该在 MIT Kerbros 邮件列表中提出这个非常具体的问题。我真的很想听听开发者的意见。
  • @FrankPl:Web 应用程序/浏览器中的可发布票证的具体用例是什么?听起来很有趣。
  • @Koraktor:如上所述,我们的应用程序允许用户创建一些计划在未来某个日期/时间执行的批处理作业。这些作业需要通过 http(s) 访问另一个应用程序。目前,执行不需要用户特定的身份验证。但是下一个版本的应用程序需要使用在浏览器中运行客户端的用户的身份验证。这里我们遇到了一个问题,默认情况下 Kerberos 票证在 10 小时后过期,可能在计划作业执行之前。

标签: java kerberos gssapi


【解决方案1】:

除了我的评论:

弗兰克,你真的读过RFC4120 的第 2.4 章吗?来自客户端的 TGT 必须具有初始标志 MAY-POSTDATE。请先检查一下。是的,Java GSS 支持,但我自己没有尝试过。见this搜索。

弗兰克,可以解决你的问题。昨天刚来找我。我已经回答了这个问题。向后移植此代码可能需要一些工作,但值得。

Generating AD Kerberos tickets without user password

【讨论】:

  • 谢谢你。无论如何,我认为我们会坚持向用户询问用户名和密码的解决方案(因为无论如何在当前版本的应用程序中都是这种情况,所以从用户的角度来看没有变化),然后只生成一个新票在我们需要的时候在服务器上。
  • 这行得通,但不是很优雅。您的方法将在密码到期/更改和重新提供新密码的黄昏中失败。
  • 我完全同意。但我必须平衡努力和结果。
  • 经过一番思考,密码过期的问题可能也是我最初想到的过期票证的问题——因为票证的加密/解密是使用派生的密钥完成的从用户密码。但实际上,我不知道。更改密码后重新验证票证的行为未在 RFC 中指定。
  • 我不认为这会发生,因为 KDC 知道密码何时过期并且应该支持该暮光间隔。你可以做一个很简单的测试:登录Windows,获取TGT。在另一台机器上更改密码。回到机器一,尝试用旧的 TGT 获得服务票。这应该有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 2014-03-19
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
相关资源
最近更新 更多