面向人类的JAAS


83

我很难理解JAAS。一切似乎都比应有的要复杂(尤其是Sun教程)。我需要一个简单的教程或示例,说明如何在基于Struts + Spring + Hibernate的Java应用程序中使用自定义用户存储库实现安全性(身份验证+授权)。可以使用ACEGI实现。


很棒的问题。合法文档失败的标题太小了。
Guido Anselmi

JAAS最佳问答。我一直很难尝试开始。
cristiandley

@mattb,如果可能的话,我想做一个附录。我相信我的回答可能有助于理解您的问题。从概念上讲。
pss1suporte

Answers:


23

3
jaasbook的链接已死。现在它已移至jaasbook.wordpress.com
Eric B.

@Martlark,如果可能,我想做一个附录。我相信我的回答可能有助于您的理解。从概念上讲。
pss1suporte

51

其他用户在上面提供了一些非常有用的链接,因此我不会打扰这些链接。我在用于Web应用程序的JAAS中进行了类似的研究,并且遇到了“障碍”,直到我最终意识到JAAS是一种解决Java世界中Web应用程序不同的“层”上的安全性的框架。它是为解决Java SE(而非Java EE)中的安全性问题而构建的。

JAAS是一个安全框架,用于在比Web应用程序低得多的级别上保护事物。这些事情的一些示例是JVM级别上可用的代码和资源,因此所有这些功能都可以在JVM级别上设置策略文件。

但是,由于Java EE是在Java SE之上构建的,因此JAAS中的一些模块已在Java EE安全性中重用,例如LoginModules和Callbacks。

请注意,除了Java EE安全性之外,还有Spring安全性(以前称为Acegi),类似于本机Java EE安全性,它解决了保护Web应用程序问题的更高层次。它是一个单独的安全性实现,尽管它在许多方面具有相似的行为,但它不是建立在标准Java EE安全性之上的。

总而言之,除非您希望保护Java SE级别的资源(类,系统资源),否则除了使用公共类和接口之外,我看不到JAAS的任何实际用途。仅专注于使用Spring Security或普通的Java EE安全性,它们都解决了许多常见的Web应用程序安全性问题。


2
Java EE 6教程假定您了解基本的安全性概念,因此对JAAS进行一些概述不会有什么坏处。
jacktrades 2012年

关于JAAS的最佳解释!
David Hofmann

@isiu,如果可能,我想做一个附录。我相信我的回答可能有助于您的理解。从概念上讲。
pss1suporte

11

javax.security是imho过于复杂的API。结果,不仅有LoginModules的实现者,还有整个身份验证和授权api的实现者,它们在上方创建了抽象层,例如Authentication&Authorization manager。

对于初学者来说,这是好事,打印到你的记忆。

其次,imho对于JAAS来说,最简单的设置和运行库是Jboss PicketBox。它说明了如何通过JBossAuthenticationManager和JBossAuthorizationManager进行身份验证和授权...可以通过XML或注释轻松配置。您可以使用它来管理webapp和独立应用程序。

如果您需要授权部分来管理存储库访问,就资源的ACL而言,这就是您所需要的。

安全性的问题是,通常您需要根据需要对其进行自定义,因此您最终可能会实现:

LoginModule-验证用户名+密码

这样使用CallbackHandlernew LoginContext("Sample", new MyCallbackHandler());

CallbackHandler传递给底层的LoginModule,以便它们可以与用户通信和交互-例如,通过图形用户界面提示输入用户名和密码。因此,在Handler内部,您可以从user获取用户名和密码,并将其传递给LoginModule。

LoginContext-那么您只需调用lc.login(); 并验证凭据。LoginContext填充有经过身份验证的Subject。

但是,除非您需要某些特定的东西,否则Jbos​​s Picketbox为您提供了一种非常简单的方法。


8

lsiu的答案是这里的几个真正“得到它”的答案之一;)

除了这个答案外,关于此主题的一个很好的参考是《 JAAS发生了什么?

它解释了JASPIC如何成为Servlet和EJB安全模型以及潜在的JAAS登录模块之间的Java EE中的链接,但是在许多情况下,JAAS的角色被简化为Java EE中相对简单的用户名和角色提供者。

来自同一作者的是Enterprise中的JAAS,这是一篇较旧的文章,但是提供了许多关于Java SE(JAAS)和Java EE模型为何会分开的历史背景。

总体但也有少数种类从JAAS Java EE中直接使用,基本上PrincipalSubjectCallbackHandler。后两个主要由JASPIC使用。我已经在文章《使用JASPIC在Java EE中实现容器认证》中解释了JASPIC



1

对于纯粹的JAAS教程,请查看此内容。它虽然很旧,但是应该对JAAS基础有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.