JAAS、SAML和Realm之间有什么区别?

4
我正在学习JAAS,然后遇到了SAML和Realm这些术语,我现在很困惑。
在任何基本的JAAS教程中,我们几乎都在配置普通Realm配置。如果我阅读SAML的配置,则看起来与JAAS类似。我完全不知道为什么会有不同的名称。也许SAML是建立在Realm上,而JAAS是建立在SAML上,不确定是否有人可以清楚地说明差异。
请谦虚地请求,如果您分享任何链接,请稍微定义一下,这样当我阅读它们时就会有帮助。
我已成功地在JBOSS和Glassfish上配置了JAAS的基本和FROM认证。这有助于保护我的JSP和Servelets(Web项目)。如果我想保护应用程序的一部分作为EJB,该去哪里呢?

如果可能的话,我想做一个补充。我相信我的答案可以帮助理解你的问题。从概念上说。 - pss1suporte
3个回答

10

JAAS是Java SE和EE的一组标准API,提供了基本的身份验证和有限的授权方式。JAAS的典型用途是通过LoginModules进行身份验证。实现LoginModule接口(javax.security.auth.spi.LoginModule)能够根据调用者在CallbackHandler中提供的凭据对用户进行身份验证。大多数应用服务器允许您插入自己的LoginModules。JAAS的其他关键概念是Subject(关于用户的信息集合)和Principal(用户的单个属性- ID,密码等)。JAAS的授权功能相当有限,很少直接使用。

Java Web应用程序的标准身份验证机制(例如在web.xml描述符中声明的FORM、BASIC或DIGEST)通常将提供的凭证验证委托给配置的JAAS LoginModules。

Realm是一个概念,用于表示不同应用程序/系统的身份验证和授权策略的分离。例如,如果要使用LDAP验证应用程序A中的用户,并且应用程序B使用数据库表,则可以将它们放入不同的安全领域中,以便隔离并正确执行其安全要求。这个术语的典型系统是Tomcat,但是您也会在其他容器/应用服务器中找到类似之处。在大多数情况下(例如部署单个应用程序时),您不需要过多地担心领域。

Java EE提供了使用基于角色的访问控制(RBAC)来保护EJB的标准机制。首先,定义适用于应用程序的角色,然后定义访问应用程序的用户属于哪些角色。然后,可以使用声明性授权(=使用安全注释(如@RolesAllowed、@PermitAll、@DeclareRoles)注释您的方法或使用XML描述符进行相同操作)或编程式授权(=通过在代码中直接调用EJBContext上的isCallerInRole测试用户是否属于某个角色)。一个基本的教程可以在这里找到:http://docs.oracle.com/javaee/6/tutorial/doc/bnbyl.html

SAML是一种与以往不同的技术。您可以将SAML WebSSO视为身份验证方法。通常,SAML是一种标准,用于定义基于XML的协议,以安全地在远程系统之间传输有关用户、其身份验证事件和安全属性的信息。除了协议本身外,SAML标准还定义了该协议的典型用例,最常见的就是Web单点登录(一种在名为Identity Provider的实体处对用户进行外部身份验证并登录到应用程序 - Service Provider的可能性,而不向应用程序揭示用户凭据)。在这些用例中,SAML类似于Facebook或Google提供给第三方开发人员的OpenID或OAuth 2.0身份验证。

希望这些能够有所帮助, Vladimir Schafer


@VladimirSachafer,如果可能的话,我想做一个补充。我相信我的答案可以帮助理解你的答案。从概念上说。 - pss1suporte

2
除了其他答案之外,我发现从这篇文章中的以下解释很有帮助:
SAML和JAAS实际上是两个独立的安全框架。 SAML是XML框架,用于交换身份验证和授权信息。 SAML提供了一个标准的XML模式,用于指定身份验证、属性和授权决策语句,并且还指定了基于Web服务的请求/响应协议来交换这些语句。
另一方面,通过特定于实现的登录模块,JAAS接收有关用户的信息,对用户进行身份验证,并验证他们是否是有效主体。
因此,据我所知,JAAS可用于为您的应用程序实现自定义身份验证和授权,并且有许多可能的方式可以做到这一点,其中一些涉及使用SAML。例如,您可以使用SAML获取用户的身份和角色/组信息;这将存储在XML令牌中,您的JAAS模块需要解析这些令牌。

如果可能的话,我想要补充一点。我相信我的回答可以帮助理解你的回答。从概念上说。 - pss1suporte

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接