Java EE Security: JASPIC / JAAS还是应用安全框架?(玻璃鱼3)

2022-09-03 15:32:00

我目前正在使用Oracle ADF(这是一个端到端的Java EE框架)来构建我的Web应用程序,并使用GlassFish 3.1作为应用程序服务器。

后者支持JAAS(在其管理控制台中声明性)。因此,我创建了一个安全域,并将它们与配置文件中声明的角色进行映射,并使用 JAAS 实现授权和认证安全性功能。一切都很好,直到现在!在过去的几周里,我一直在研究Java EE安全性。

我发现JAAS已经足够好了,如果你坚持“基本”的安全性。此外,JAAS(作为Java安全框架的一部分)似乎只适用于Java SE(但由于Java EE是在Java SE上构建的,因此它的一些模块正在被重用,例如LoginMethod和回调)。

然后,我发现了许多关于JASPIC的帖子,发现它只能通过编程方式实现(不是问题),并且应用程序服务器供应商尚未完全支持它,并试图在两者之间进行比较。即使 JASPIC1.1 发行版已经解决了一些问题,例如:

但是,容器不会完全记住身份验证。SAM 仍会在每次请求时调用,并且 SAM 仍必须重新进行身份验证

(对我来说听起来不太好)。

然后,我一直在寻找集成一些安全框架。最有名的似乎是“春天”“四郎”。当然,它们中的每一个都有自己的特点(可能是第一个更适合特定情况,而第二个在另一个情况下)。对我来说更重要的是:

  • 认证
  • 授权
  • 会话管理(可能还有加密)

但是,到处我都发现了矛盾的结论。结果:我现在在搜索之前更加困惑。

我只是一个安全等主题的新手,而且我是一个开发人员(我有东西要实现),所以很难跟上每个新版本的最新状态,而且安全性方面的进展似乎每天都在飞速发展。

如果可能的话,我想要一些基于个人经验的事实。每一个提示或建议都是值得赞赏的。我想在采取实施步骤之前确保我有信心。


答案 1

JASPIC是作为Java EE的一部分与它很好地集成的一种技术。

JASPIC认证模块不会自动记住会话的事实也是一个优势,因为它使它们也适用于无状态应用程序(想想像JAX-RS这样的API)。当您进行身份验证并确实需要会话时,只需将结果(用户名+组)放入会话中即可。然后,在每个“validateRequest”方法开始时,快速检查会话中是否有任何内容,如果是,请再次将这些内容提供给容器。无需从头开始进行身份验证,当然也无需记住任何密码!

Shiro和Spring Security是非常功能齐全的框架。你几乎无法将其与JASPIC进行比较,JASPIC是非常低级和基本的。Spring和Shiro都没有完全与Java EE集成。Spring Security通常被认为比Shiro更复杂。

希望这有帮助


答案 2

JASPIC 的 Servlet 配置文件要求在每次请求时调用已配置的(针对应用程序的)服务器身份验证模块 (SAM)。正是这样,SAM 将能够管理身份验证会话(如果需要)

该配置文件还支持以下情况:将 SAM 配置为执行身份验证,但随后希望将身份验证会话管理委派给包含容器,该容器由使用 registerSession 回调属性启用。

同样,正如Mike Braun所指出的那样,该配置文件还支持无状态模式,包括身份验证会话,并与容器授权系统完全集成;这样,当目标请求被授权约束(例如在 web 中定义.xml或使用 ServletSecurity 注释来定义)时,必须进行 JASPIC 身份验证。

JASPIC 定义了回调,容器提供了回调处理程序,允许可移植 SAM 设置容器调用方主体,查阅容器的用户注册表以进行密码验证和组分配等。