我试图学习JAAS
,然后我想出了术语SAML
和Realm
,现在我很困惑。
在JAAS
的任何基本教程中,我们几乎都在配置普通Realm
配置的基本配置。如果我阅读SAML
的配置,那么它看起来类似于JAAS
.我完全不知道为什么有不同的名字。可能是 SAML 建立在 Realm 上,而 JAAS 建立在 SAML 上,不确定任何机构都可以清楚地说明其中的区别。
如果您分享任何链接,请谦虚的请求,请定义一点,以便在我阅读它们时对我有所帮助。
我已经在JBOSS和Glassfish上成功配置了JAAS的BASIC和基于FROM的身份验证。它帮助我保护了我的JSP
和Servelets
(网络项目)。如果我想保护 EJB 作为应用程序的一部分,在哪里查找。
JAAS 是一组用于 Java SE 和 EE 的标准 API,它们提供了实现身份验证和有限授权的基本方法。JAAS 用于身份验证的典型用途是通过 LoginModules。LoginModule 接口 (javax.security.auth.spi.LoginModule) 的实现能够根据调用方在 CallbackHandler 中提供的凭据对用户进行身份验证。大多数应用程序服务器允许您插入自己的登录模块。JAAS 的其他关键概念是主题(有关用户的信息集合)和主体(用户的单个属性 - 标识、密码)。JAAS 的授权功能相当有限,很少直接使用。
Java Web 应用程序的标准认证机制(如 Web .xml描述符中声明的 FORM、BASIC 或 DIGEST)通常将所提供凭证的验证委托给配置的 JAAS 登录模块。
Realm 是一个概念,用于表示不同应用程序/系统的身份验证和授权策略的分离。 例如,如果要使用 LDAP 对应用程序 A 中的用户进行身份验证,而应用程序 B 使用数据库表对用户进行身份验证,则可以将他们放入不同的安全域中,以便隔离并正确执行其安全要求。使用此术语的典型系统是Tomcat,但您也可以在容器/应用程序服务器中找到相似之处。在大多数情况下(例如,在开发单个应用程序时),您不需要过多地担心 Realms。
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 单点登录(可以从名为身份提供程序的实体的应用程序外部对用户进行身份验证,并登录到应用程序 - 服务提供商,而无需向其透露用户的凭据)。在这些用例中,SAML类似于OpenID或OAuth 2.0身份验证,您可以看到Facebook或Google向第三方开发人员提供。
希望这有帮助,Vladimir Schafer
看看这是否对您有帮助。领域是具有特定配置的区域。JAAS 和 SAML 都是认证模块,可以配置为处理该 reaml 上的认证。SAML 是一种身份验证方案。http://en.wikipedia.org/wiki/Security_Assertion_Markup_Language
为了补充其他答案,我发现本文中的以下解释很有帮助:
实际上,SAML 和 JAAS 是两个不同的安全框架。SAML 是一个用于交换身份验证和授权信息的 XML 框架。SAML 提供了一个标准的 XML 架构,用于指定身份验证、属性和授权决策语句,此外,它还指定了一个基于 Web 服务的请求/回复协议来交换这些语句。
另一方面,JAAS 通过特定于实现的登录模块接收有关用户的信息,对用户进行身份验证,并验证它们是否为有效主体。
因此,据我了解,JAAS 可用于为您的应用程序实现自定义身份验证和授权,并且有许多可能的方法可以做到这一点,其中一些涉及 SAML。例如,您可以使用 SAML 获取用户的身份和角色/组信息;这将存储在 JAAS 模块需要解析的 XML 令牌中。