2.8.6. 安全域配置
安全域在域控制器或单机服务器上集中配置。使用安全域时,可以将应用配置为使用安全域,而不是单独配置安全性。这允许用户和管理员利用相对的安全性。
示例
这种配置结构的一个常见场景是在测试和生产环境之间移动应用程序的过程。如果应用单独配置了安全性,则可能需要在每次将其提升到新环境中(例如从测试环境到生产环境)时对其进行更新。如果该应用改为使用安全域,则各个环境中的 JBoss EAP 实例可以针对当前环境正确配置其安全域,允许应用利用安全域提供正确的安全配置。
2.8.6.1. 登录模块 复制链接链接已复制到粘贴板!
JBoss EAP 包括多个捆绑登录模块,适合大多数在安全域中配置的用户管理角色。security
子系统提供一些核心登录模块,它们可以从关系数据库、LDAP 服务器或平面文件读取用户信息。除了这些核心登录模块外,JBoss EAP 还提供其他登录模块,提供满足自定义需求的用户信息和功能。
常用登录模块摘要
- LDAP 登录模块
-
Ldap 登录模块是一种登录模块实施,可根据 LDAP 服务器进行身份验证。
security
子系统使用连接信息(即 bindDN)连接到 LDAP 服务器,即bindDN
具有权限为baseCtxDN
和rolesCtxDN
树搜索用户和角色,这通过 JNDI 初始上下文提供。当用户尝试进行身份验证时,LDAP 登录模块将连接到 LDAP 服务器并将用户的凭据传递给 LDAP 服务器。身份验证成功后,会在 JBoss EAP 中为该用户创建InitialLDAPContext
,填充有该用户的角色。 - LdapExtended Login Module
- LdapExtended 登录模块搜索用户以及绑定身份验证的相关角色。角色以递归方式查询,并遵循 DN 来浏览分层角色结构。登录模块选项包括所选 LDAP JNDI 提供商支持的任何选项。
- UsersRoles 登录模块
- UsersRoles login 模块是一个简单的登录模块,支持从 Java 属性文件加载的多个用户和用户角色。此登录模块的主要用途是利用应用部署的属性文件,轻松测试多个用户和角色的安全设置。
- 数据库登录模块
- Database 登录模块是基于 Java 数据库连接(JDBC)登录模块,支持身份验证和角色映射。如果用户名、密码和角色信息存储在关系数据库中,则使用此登录模块。这可以通过以预期格式提供对逻辑表的引用,包含主体和角色。
- 证书登录模块
-
证书登录模块基于 X509 证书对用户进行身份验证。此登录模块的典型用例是 Web 层中的 CLIENT-CERT 身份验证。此登录模块仅执行身份验证,并且必须与能够获取授权角色的另一登录模块相结合,以完全定义对安全 Web 或 EJB 组件的访问权限。此登录模块的两个子类是
CertRolesLoginModule
和DatabaseCertLoginModule
,扩展行为以从属性文件或数据库获取授权角色。 - Identity Login 模块
-
Identity login 模块是一种简单的登录模块,可将硬编码的用户名关联到针对该模块进行身份验证的任何主题。它使用由 principal 选项指定的名称创建一个
SimplePrincipal
实例。如果需要为服务提供固定的身份,此登录模块非常有用。这也可以用于开发环境,以测试与给定主体和相关角色关联的安全性。 - Runas loginin 模块
- RunAs login 模块是一种帮助模块,可在身份验证登录阶段将 run-as 角色推送到堆栈;然后,它在提交或中止阶段从堆栈填充 run-as 角色。此登录模块的目的是为其他登录模块提供角色,这些模块必须访问受保护的资源才能执行其身份验证,例如,访问安全 EJB 的登录模块。RunAs 登录模块必须在需要按角色建立的登录模块之前配置。
- 客户端登录模块
-
Client login 模块是登录模块的一种实施,供 JBoss 客户端在建立调用者身份和凭据时使用。这会创建一个新的
SecurityContext
,为其分配一个主体和凭证,并将SecurityContext
设置为ThreadLocal
安全上下文。Client login 模块是客户端唯一支持建立当前线程调用者的机制。单机客户端应用和服务器环境(充当 JBoss EJB 客户端)均未配置为以透明方式使用 JBoss EAP安全
子系统,必须使用 Client 登录模块。
此登录模块不执行任何身份验证。它只是将提供的登录信息复制到服务器 EJB 调用层,以便在服务器上随后进行身份验证。在 JBoss EAP 中,这仅支持将用户身份切换为 JVM 调用。远程客户端不支持它建立身份。
- SPNEGO 登录模块
-
SPNEGO 登录模块是一种登录模块,通过 KDC 建立呼叫人身份和凭证。该模块实施 SPNEGO,是 JBoss Negotiation 项目的一部分。此身份验证可以在与 AdvancedLdap 登录模块的链配置中使用,以允许与 LDAP 服务器协作。Web 应用还必须启用应用中的
NegotiationAuthenticator
以使用此登录模块。 - RoleMapping Login Module
-
RoleMapping 登录模块支持将身份验证过程最终生成的角色映射到一个或多个声明角色。例如,如果身份验证过程确定用户 John 具有角色
ldapAdmin 和
,并且testAdmin
web.xml 或
文件中定义的声明角色是ejb-jar.xml
admin
,则此登录模块会将ldapAdmin
和testAdmin
角色映射到 John。RoleMapping 登录模块必须定义为登录模块配置的可选模块,因为它会改变之前映射角色的映射。 - 远程登录模块
- 远程登录模块检查当前正在通过远程连接进行身份验证的请求。如果使用远程接口收到请求,则该请求与身份验证过程中创建的身份关联。
- RealmDirect 登录模块
-
RealmDirect 登录模块允许使用现有的安全域来制定身份验证和授权决策。配置后,此模块将使用引用的域来查找身份信息,以做出身份验证决策和映射用户角色。例如,JBoss EAP 随附的预配置
其他
安全域具有 RealmDirect 登录模块。如果此模块中没有引用任何域,则默认使用ApplicationRealm
安全域。 - 自定义模块
- 如果与 JBoss EAP 安全框架捆绑的登录模块无法满足安全环境的需求,可以编写自定义登录模块实施。AuthenticationManager 需要主题主体集的特定使用模式。需要深入了解 JAAS 主题类的信息存储功能以及这些功能的预期用法才能编写与身份验证管理器一起使用的登录模块。
经常使用 UnauthenticatedIdentity login 模块选项。在某些情况下,请求未以身份验证的格式收到。Unauthenticated Identity 是一个登录模块配置选项,它将特定身份(如 guest
)分配给在没有相关身份验证信息发出的请求。这可用于允许未受保护的 servlet 在不需要特定角色的 EJB 上调用方法。此类主体没有关联角色,只能访问与未选中权限约束关联的不受保护的 EJB 或 EJB 方法。