gpt4 book ai didi

Java JAAS 与 Linux PAM 集成(包括密码时效)

转载 作者:太空宇宙 更新时间:2023-11-04 13:08:28 24 4
gpt4 key购买 nike

背景

在我们的项目中,我们使用自定义的 LoginModule 实现将 Web 应用程序的 JAAS 与服务器的 Linux PAM 集成。我知道有一些项目为 JAAS 实现了 PAM,但这不是重点,尤其是它们不能解决我的问题。

现在要求正确处理密码老化和影子状态。

因此尝试使用密码登录(使用网络表单)的用户是:

  • 过期应该被拒绝访问并收到一条消息,要求联系管理员续订帐户,
  • 不活动应被拒绝访问并收到一条消息,要求使用 SSH 更改其密码,
  • 在警告期内应该被授予访问权限,但会收到一条消息,告知距离必须更改密码还有多少天。

这些是 PAM 的正常行为,例如 SSH 中出现的情况。 (但请注意,这取决于 PAM 配置和帐户设置。)

问题

我可以在我们的自定义LoginModule中轻松获取所需信息。这样我就会知道状态(过期、无效、警告……)和剩余天数(如果适用)。

但是如何进一步传播它呢?

可以通过仔细挑选从 LoginModule 实现中抛出的异常来区分过期/不活动。这并不完美,因为如果某个中间层消耗异常来重新抛出其他内容,我将再次遇到麻烦。但我想这是可行的。

但是警告期又如何呢?既然登录成功了,就没有办法异常(exception)了。但我仍然需要提供额外的信息,即该密码处于警告期以及还剩多少天。

我看到的 LoginModule 之外的唯一通信方式是向 Subject 添加一些内容。但我必须添加的内容似乎既不是 Principal 也不是凭证。

当然,我可以将自定义对象作为凭证或自定义 Principal 实现推送。但这似乎并不“自然”。它看起来更像是破坏了设计。我什至没有找到任何人做类似事情的例子。

那么我该怎么做呢?有哪些方法可以通过 LoginModule 传达帐户的附加信息?

解决方法

目前我想出了一个解决方法。我可以在 PAM/NSS 上执行所需的查询,以确定 servlet 过滤器或 Controller 中的密码状态和剩余天数(如果适用)。这并不更困难 - 最后必须完成相同的调用。

但这似乎不是解决该问题的正确方法,因为它混合了职责。

那么我还能做什么呢?

最佳答案

我想我明白您想要实现的目标,但 LoginModule 不负责处理密码状态,这也不是 JAAS 的设计目的。

因此,我认为您的解决方法是可行的方法。如果您可以轻松地在 LoginModule 中获取其他信息,则在其中创建一个字段或传递一个对象,您将在其中存储该数据并在需要呈现给用户时访问它。 - 亲吻

关于Java JAAS 与 Linux PAM 集成(包括密码时效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34196679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com