登录模块参考
列出和描述可用于红帽 JBoss 企业应用平台的登录模块。
摘要
前言
由于引入 Elytron,本指南中描述的登录模块已弃用。有关使用 elytron
子系统的说明,请参阅《 如何配置服务器安全 指南》中的 Elytron Subsystem 部分。
第 1 章 登录模块概述
JBoss EAP 安全架构指南中的安全域部分介绍了登录模块的基础知识及其在安全域中的 使用。
1.1. 关于本文档的组织
本文档中涵盖的登录模块被分为以下功能区域:
登录模块功能组织
- Identity Login Module - 需要固定或硬编码的用户名时使用。
- UsersRoles Login 模块 - 从本地 Java 属性文件中加载用户名和角色。
- PropertiesUsers 登录模块 - 仅从本地 Java 属性文件中加载用户名。
- SimpleUsers Login Module - 直接在登录模块配置中定义用户名和密码。
- SecureIdentity Login 模块 - Legacy 允许在模块配置中直接定义静态主体和加密密码。
- ConfiguredIdentity Login Module - 将静态主体与任何经过身份验证的用户关联。
- 简单登录模块 - 用于测试快速安全设置的模块。
- 禁用登录模块 - 始终失败身份验证的模块。
- aon Login Module - 用于指定未经身份验证的用户的身份的模块。
- Runas Login 模块 - 在身份验证阶段添加额外静态角色的帮助模块。
- RoleMapping Login 模块 - 使用一个或多个角色添加或替换经过身份验证的用户角色的帮助模块。
- RealmDirect 登录模块 - 将身份验证委派到安全域.
- RealmUsersRoles 登录模块 - Legacy 模块被 RealmDirect 替代.
- 数据库登录模块 - 使用数据库存储用户和角色映射。
- DatabaseUsers 登录模块 - 别名到数据库以获得兼容性.
- LDAP 登录模块 - 使用 LDAP 服务器存储用户和角色映射。
- LdapExtended Login Module
- AdvancedLdap Login 模块 - 在使用 LDAP 服务器进行身份验证时提供额外的功能。
- AdvancedAdLdap 登录模块 - 提供 Microsoft Active Directory 中使用的其他功能。
- LdapUsers 登录模块 - Legacy 模块被 LdapExtended 和 AdvancedLdap 替代.
- Kerberos 登录模块 - 与 Kerberos 身份验证一起使用.
- SPNEGO 登录模块 - 与 Kerberos 身份验证一起使用.
- 证书登录模块 - 通过 X509 证书验证用户.
- CertificateRoles 登录模块 - 通过角色映射扩展证书模块.
- DatabaseCertificate 登录模块 - 扩展证书模块,角色映射存储在数据库中.
- 自定义登录模块
本指南还提供了相关主题的参考信息,如授权模块、密码堆栈和密码散列。
1.2. 扩展层次结构
本文档中涵盖的绝大多数登录模块实际上扩展了其他登录模块的配置选项和功能。登录模块用来扩展功能的结构形成层次结构:
登录模块扩展层次结构
层次结构中的大部分登录模块是具体的 Java 类,它们实例化并由 JBoss EAP 使用,但有一些无法直接实例化和使用的抽象类。这些抽象类的目的是提供通用功能,并纯粹充当要扩展的其他登录模块的基础类。
默认情况下,登录模块从它们扩展的登录模块继承所有行为和选项,但它们也可能覆盖其父登录模块中的行为和选项。在某些情况下,这可能会导致登录模块从其父级继承但未使用的某些选项。
第 2 章 摘要登录模块
抽象登录模块是抽象的 Java 类,由其他登录模块扩展,以提供常用的功能和配置选项。永远不会直接使用抽象登录模块,但配置选项可用于扩展它们的任何登录模块。
2.1. AbstractServer Login Module
短名称 :AbstractServerLoginModule
全名 : org.jboss.security.auth.spi.AbstractServerLoginModule
AbstractServer Login 模块充当许多登录模块以及多个抽象登录模块的基础类。它实施 JAAS 服务器端登录模块所需的通用功能,并实施 PicketBox 标准主题使用模式来存储身份和角色。
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
principalClass | 完全限定类名称 | org.jboss.security.SimplePrincipal | 主体实施类,其中包含一个构造器,该类将 String 参数用作主体名称。 |
module | 字符串 | none | 对可用于加载自定义回调/验证器的 jboss-module 的引用. |
unauthenticatedIdentity | 字符串 | none | 这将定义应当分配给不包含身份验证信息的请求的主名称。这允许未受保护的servlet 在 EJB 上调用不需要特定角色的方法。此类主体没有关联的角色,只能访问与未选中的权限约束关联的不受保护的 EJB 或 EJB 方法。如需了解更多详细信息,请参阅 Unauthenticated Identity 部分。 |
password-stacking | useFirstPass or false | false | 详情请查看 Password Stacking 部分。 |
2.1.1. 未经身份验证的身份
并非所有请求都以经过身份验证的格式收到。例如,unauthenticatedIdentity
登录模块配置将特定身份 guest
分配给在没有相关身份验证信息发出的请求。这可用于允许未受保护的 servlet 在不需要特定角色的 EJB 上调用方法。此类主体没有关联的角色,因此只能访问与未选中权限约束关联的不受保护的 EJB 或 EJB 方法。例如,可在 UsersRoles 和 Remoting Login Modules 中使用此配置选项
2.1.2. 密码堆栈
堆栈中可以串联多个登录模块,每一登录模块在身份验证期间提供凭据验证和角色分配。这适用于许多用例,但有时凭据验证和角色分配分散到多个用户管理存储中。
请考虑在中央 LDAP 服务器中管理用户,但应用特定角色存储在应用的关系数据库中的情况。password-stacking 模块选项捕获了这一关系。
要使用密码堆栈,每个登录模块都应将 password-stacking
属性设置为 useFirstPass
,它位于 <module-option>
部分中。如果上一配置用于密码堆栈的模块对用户进行了身份验证,所有其他堆栈模块将考虑用户通过身份验证,并且仅尝试为授权步骤提供一组角色。
当 password-stacking 选项设为 useFirstPass
时,此模块首先在属性名 javax.security.auth.login.name
和 javax.security.auth.login.password
下分别在登录模块共享状态映射中查找共享用户名和密码。
如果找到,这些属性将用作主要名称和密码。如果没有找到,则主体名称和密码由此登录模块设置,并分别存储在属性名称 javax.security.auth.login.name
和 javax.security.auth.login.password
下。
使用密码堆栈时,设置所有模块。这可确保考虑所有模块,并有机会为授权流程贡献角色。
2.2. USERNAMEPASSWORD 登录模块
短名称 : UsernamePasswordLoginModule
全名 : org.jboss.security.auth.spi.UsernamePasswordLoginModule
父级???:AbstractServer 登录模块
UsernamePassword Login Module 是一个抽象登录模块,它在登录过程中引入 identity == String username,credentials == String password view。除了以下字段外,它还会继承 Abstract Server 登录模块中的所有字段。
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
ignorePasswordCase | 布尔值 | false | 指明密码比较是否应该忽略大小写的标志。 |
digestCallback | 完全限定类名称 | none |
|
storeDigestCallback | 完全限定类名称 | none |
|
throwValidateError | 布尔值 | false | 指示验证错误是否应该公开给客户端的标志。 |
inputValidator | 完全限定类名称 | none |
用于验证客户端提供的用户名和密码的 |
与密码散列相关的 UsernamePassword
Login Module 选项将在下一节中介绍。
2.2.1. 密码哈希
大多数登录模块必须将客户端提供的密码与用户管理系统中存储的密码进行比较。这些模块通常使用纯文本密码,但可以配置为支持散列密码,以防止纯文本密码存储在服务器端。JBoss EAP 支持配置哈希算法、编码和字符集,以及处理用户密码和存储密码时。
以下是密码哈希选项,可作为登录模块的一部分配置,该模块将 UsernamePassword
Login Module 作为父项:
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
hashAlgorithm | 代表密码哈希算法的字符串。 | none |
用于哈希密码的 |
hashEncoding | 字符串 | base64 |
如果也设置了 |
hashCharset | 字符串 | 容器运行时环境中设置的默认编码 | 将密码字符串转换为字节数组时要使用的 charset/encoding 名称。 |
hashUserPassword | 布尔值 | true | 指示是否应该散列化用户输入密码的标志。散列化用户密码将与 login 模块中的值进行比较,该值应当是密码的哈希。 |
hashStorePassword | 布尔值 | false |
指示是否应该将返回的存储密码的标志进行哈希处理。这用于摘要身份验证,用户提交用户密码哈希以及要比较的服务器中特定于请求的令牌。摘要的哈希算法将是 |
passwordIsA1Hash | 布尔值 |
当 |
2.3. AbstractPasswordCredential Login Module
短名称 :AbstractPasswordCredentialLoginModule
全名 : org.picketbox.datasource.security.AbstractPasswordCredentialLoginModule
父级???:AbstractServer 登录模块
AbstractPasswordCredential Login Module 是一个处理 PasswordCredentials 的基础登录模块。
2.4. 通用登录模块
短名称 : CommonLoginModule
全名 : org.jboss.security.negotiation.common.CommonLoginModule
父级???:AbstractServer 登录模块
常见的登录模块是抽象登录模块,充当 JBoss Negotiation 中一些登录模块的基础登录模块。
第 3 章 登录模块没有外部身份存储
3.1. Identity Login 模块
短名称 : 身份
全名 : org.jboss.security.auth.spi.IdentityLoginModule
父级???:AbstractServer 登录模块
身份登录模块是一种简单的登录模块,可将硬编码的用户名关联到针对该模块进行身份验证的任何主题。它使用由 principal 选项指定的名称创建一个 SimplePrincipal
实例。如果需要为服务提供固定的身份,此登录模块非常有用。这也可以用于开发环境,以测试与给定主体和相关角色关联的安全性。
表 3.1. Identity login 模块选项
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
principal | 字符串 | guest | 用于主体的名称。 |
角色 | 以逗号分隔的字符串列表 | none | 以逗号分隔的角色列表,这些角色将分配到该主题。 |
3.2. UsersRoles 登录模块
短名称 :UsersRoles
全名 : org.jboss.security.auth.spi.UsersRolesLoginModule
父名称???:UsernamePassword Login Module
UsersRoles
login 模块是一个简单的登录模块,支持从 Java 属性文件加载的多个用户和用户角色。此登录模块的主要用途是利用应用部署的属性文件,轻松测试多个用户和角色的安全设置。
表 3.2. UsersRoles 登录模块选项
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
usersProperties | 文件或资源的路径。 | users.properties |
包含用户对密码映射的文件或资源。文件的格式为 |
rolesProperties | 文件或资源的路径。 | roles.properties |
包含 user-to-role 映射的文件或资源。该文件的格式为 |
defaultUsersProperties | 字符串 |
|
包含用户名到密码映射(用作传递给 |
defaultRolesProperties | 字符串 |
|
包含 username-to-roles 映射的属性名称,该映射将用作传递给 |
roleGroupSeperator | 字符串 | . |
用于将角色组名称与用户名分开的字符,如 |
3.3. PropertiesUsers 登录模块
短名称 :属性用户
全名 : org.jboss.security.auth.spi.PropertiesUsersLoginModule
父项???:UserRoles 登录模块
PropertiesUsers
登录模块,它使用属性文件存储用户名和密码以进行身份验证。不提供授权(角色映射)。此模块仅适用于测试。
3.4. SimpleUsers 登录模块
短名称 :SimpleUsers
全名 : org.jboss.security.auth.spi.SimpleUsersLoginModule
父项???:属性用户登录模块
使用 module-option
存储用户名和明文密码的 SimpleUsers
登录模块。module-option
的 name
和 value
属性指定用户名和密码。它仅用于测试,不适合于生产环境。
3.5. SecureIdentity Login Module
短名称 :SecureIdentity
全名 : org.picketbox.datasource.security.SecureIdentityLoginModule
父项???:AbstractPasswordCredential Login 模块
SecurityIdentity
登录模块是提供给传统用途的模块。它允许用户加密密码,然后使用加密密码和静态主体。如果应用使用 SecureIdentity
,请考虑使用密码库机制。
表 3.3. SecureIdentity 登录模块选项
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
username | 字符串 | none | 用于身份验证的用户名。 |
password | 加密的字符串 | "" |
用于身份验证的密码。若要加密密码,可直接在命令行使用模块,如 |
managedConnectionFactoryName | JCA resource | none | 数据源的 JCA 连接工厂的名称。 |
3.6. ConfiguredIdentity Login Module
短名称 : ConfiguredIdentity
全名 : org.picketbox.datasource.security.ConfiguredIdentityLoginModule
父项???:AbstractPasswordCredential Login 模块
ConfiguredIdentity
登录模块将模块选项中指定的主体与针对该模块进行身份验证的任何主题相关联。使用的 Principal 类的类型是 org.jboss.security.SimplePrincipal
。
表 3.4. ConfiguredIdentity Login 模块选项
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
username | 字符串 | none | 用于身份验证的用户名。 |
password | 加密的字符串 | "" | 用于身份验证的密码,可以通过密码库机制对其进行加密。默认值为空 String。 |
principal | 主体的名称 | none | 与针对模块通过身份验证的任何主题关联的主体。 |
3.7. 简单登录模块
短名称 :Simple
全名 : org.jboss.security.auth.spi.SimpleServerLoginModule
父名称???:UsernamePassword Login Module
Simple login 模块是一个用于快速设置安全性的模块,用于测试目的。它实现以下简单算法:
-
如果密码为空,请验证用户并分配
guest
的身份和guest
角色。 -
否则,如果密码等于用户,请分配与
用户名以及用户和
虚拟客户机
角色相同的身份。
- 否则,身份验证会失败。
Simple login 模块没有选项。
3.8. 禁用登录模块
短名称 :Disabled
全名 : org.jboss.security.auth.spi.DisabledLoginModule
身份验证始终失败的登录模块。它将用于需要禁用的安全域,例如,当我们不希望 JAAS 回退到 使用其他
安全域时。
表 3.5. 禁用登录模块选项
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
jboss.security.security_domain | 字符串 | 要在错误消息中显示的安全域名称。 |
3.9. anon loginin 模块
短名称 : Anon
全名 : org.jboss.security.auth.spi.AnonLoginModule
父名称???:UsernamePassword Login Module
个简单的登录模块,允许通过 unauthenticatedIdentity
属性来指定未经身份验证的用户的身份。此登录模块除了从 UsernamePassword Login Module 继承的选项之外,没有其他选项。
3.10. Runas loginin 模块
短名称 : RunAs
全名 : org.jboss.security.auth.spi.RunAsLoginModule
RunAs
login 模块是一种帮助模块,它会在身份验证的登录阶段将角色 作为
角色推送到堆栈,然后在提交或中止阶段以堆栈形式填充 作为角色运行
。此登录模块的目的是为其他登录模块提供角色,这些模块必须访问受保护的资源才能执行其身份验证,例如,访问安全 EJB 的登录模块。RunAs
登录模块必须在需要 按
角色建立的登录模块之前配置。
表 3.6. Runas loginin 模块选项
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
roleName | 角色名称 | nobody |
在登录阶段用作角色 |
principalName | 主体名称 | nobody |
在登录阶段 |
principalClass | 完全限定类名称。 | org.jboss.security.SimplePrincipal | 主体实施类,其中包含一个构造器,用于将 String 参数用作主体名称。 |
3.11. RoleMapping Login Module
短名称 : RoleMapping
全名 : org.jboss.security.auth.spi.RoleMappingLoginModule
父级???:AbstractServer 登录模块
RoleMapping
登录模块是一个登录模块,它支持将作为身份验证过程最终结果的角色映射到一个或多个声明角色。例如,如果身份验证过程确定用户 John
具有角色 ldapAdmin 和
,并且 testAdmin
web.xml 或
文件中定义的声明角色是 ejb-jar.xml
admin
,则此登录模块会将 admin 角色映射到 John
。RoleMapping
登录模块必须定义为登录模块配置的可选模块,因为它会改变之前映射角色的映射。
表 3.7. RoleMapping 登录模块选项
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
rolesProperties | 属性文件或资源的完全限定文件路径和名称 | none |
属性文件或资源的完全限定文件路径和名称,用于将角色映射到替换角色。格式为 |
replaceRole | true or false | false | 是要添加到当前角色,还是将当前角色替换为映射的角色。如果设为 true,则替换。 |
3.12. RealmDirect 登录模块
短名称 : RealmDirect
全名 : org.jboss.as.security.RealmDirectLoginModule
父名称???:UsernamePassword Login Module
RealmDirect
登录模块允许使用现有的安全域来做出身份验证和授权决策。配置后,此模块将使用引用域查找身份信息,以做出身份验证决策并委派到该安全域以做出授权决策。例如,JBoss EAP 随附的预配置 其他
安全域具有 RealmDirect
登录模块。如果此模块中没有引用任何域,则默认使用 ApplicationRealm
安全域。
表 3.8. RealmDirect 登录模块选项
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
realm | 字符串 | ApplicationRealm | 所需域的名称。 |
RealmDirect
登录模块仅将 realm
用于传统安全性,而不用于 Elytron。
3.13. RealmUsersRoles Login Module
短名称 : RealmUsersRoles
全名 : org.jboss.as.security.RealmUsersRolesLoginModule
父项???:UserRoles 登录模块
登录模块,可以从给定域验证用户。用于远程调用。建议使用 RealmDirect 而不是 RealmUsersRoles
。
表 3.9. RealmUsersRoles 登录模块选项
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
realm | 字符串 | ApplicationRealm | 所需域的名称。 |
hashAlgorithm | 字符串 | REALM | 由登录模块为从继承的 UsernamePassword Login Module 中的选项设置的静态值. |
hashStorePassword | 字符串 | false | 由登录模块为从继承的 UsernamePassword Login Module 中的选项设置的静态值. |
RealmUsersRoles
登录模块仅将 realm
用于传统安全性,而不用于 Elytron。
第 4 章 使用外部身份存储的登录模块
4.1. 数据库登录模块
短名称 :Database
全名 : org.jboss.security.auth.spi.DatabaseServerLoginModule
父名称???:UsernamePassword Login Module
Database 登录模块是 JDBC 登录模块,支持身份验证和角色映射。如果用户名、密码和角色信息存储在关系数据库中,则使用此登录模块。这可以通过提供对逻辑表的引用,其中包含预期格式的 Principals 和 Roles。
表 4.1. 数据库登录模块选项
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
dsJndiName | JNDI 资源 | java:/DefaultDS | 存储身份验证信息的 JNDI 资源的名称。 |
principalsQuery | 准备 SQL 语句 |
选择 | 准备好的 SQL 查询,用于获取有关主体的信息。 |
rolesQuery | 准备 SQL 语句 | none |
准备好的 SQL 查询,用于获取有关角色的信息。它应当等同于查询 的elect |
suspendResume | 布尔值 | true | 在数据库操作期间是否应该暂停现有的 JTA 事务。 |
transactionManagerJndiName | JNDI 资源 | java:/TransactionManager | 登录模块使用的事务管理器 JNDI 名称。 |
4.2. DatabaseUsers Login Module
短名称 : DatabaseUsers
全名 :org.jboss.security.DatabaseUsers
4.3. LDAP 登录模块
短名称 :Ldap
全名 : org.jboss.security.auth.spi.LdapLoginModule
父名称???:UsernamePassword Login Module
Ldap
登录模块是一种登录模块实施,可根据 LDAP 服务器进行身份验证。security
子系统使用连接信息(一个 java.naming.security.principal)
连接到 LDAP 服务器,它具有权限搜索 baseCtxDN
和 rolesCtxDN
树(通过 JNDI 初始上下文提供)。用户尝试验证时,Ldap
登录模块连接到 LDAP 服务器,并将用户的凭据传递给 LDAP 服务器。
这些凭据通过串联 main DNPrefix
、用户输入和 main DNSuffix
组成。例如,请考虑以下情景:
-
principalDNPrefix
设置为uid=
。 -
principalDNSuffix
设置为,ou=People,dc=jboss,dc=org
。
如果用户输入设置为 jduke
,则搜索字符串为 uid=jduke,ou=People,dc=jboss,dc=org
。如果用户输入为 jduke,ou=Employants,
则搜索字符串应为 uid=jduke,ou=Employude,ou=People,dc=jboss,dc=org
。
任何用户输入都会在执行搜索前转换为字符串。因此,任何特殊字符(如逗号)都必须被转义,搜索才能成功运行。
身份验证成功后,会在 JBoss EAP 中为该用户创建 InitialLDAPContext
,填充有该用户的角色。
表 4.2. LDAP 登录模块选项
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
principalDNPrefix | 字符串 |
添加到用户名中的前缀以构成用户 DN。您可以使用 principal | |
principalDNSuffix | 字符串 |
添加至用户名的后缀,组成用户 DN。您可以使用 principal | |
rolesCtxDN | 完全限定 DN | none | 用于搜索用户角色的上下文的完全限定 DN。 |
userRolesCtxDNAttributeName | attribute | none |
user 对象中的 属性,其中包含用于搜索用户角色的上下文的 DN。这与 |
roleAttributeID | attribute | 角色 | 包含用户角色的属性名称。 |
roleAttributeIsDN | true or false | false |
|
roleNameAttributeID | attribute | name |
|
uidAttributeID | attribute | UID |
与用户 ID 对应的 |
matchOnUserDN | true or false | false |
搜索用户角色是否应与用户完全区分的 DN 或用户名匹配。如果为 true,则完整用户 DN 将用作匹配值。如果为 false,则只有用户名用作对 |
allowEmptyPasswords | true or false | false | 是否允许空密码。大多数 LDAP 服务器将空密码视为匿名登录尝试。要拒绝空密码,请将其设置为 false。 |
searchTimeLimit | 整数 | 10000 或 10 秒 | 用户或角色搜索的超时时间(毫秒)。 |
searchScope |
其中之一: |
| 要使用的搜索范围。 |
jaasSecurityDomain | 字符串 | none |
|
有关连接到 LDAP 服务器和创建初始上下文相关的其他 LDAP 上下文属性的详情,请参考 LDAP 连接选项。
虽然此登录模块确实从其父进程 UsernamePassword Login Module 继承 ignorePasswordCase 选项,但它不会由这一特定登录模块使用。
4.4. LdapExtended Login Module
短名称 :LdapExtended
全名 : org.jboss.security.auth.spi.LdapExtLoginModule
父名称???:UsernamePassword Login Module
LdapExtended 登录
模块将搜索要绑定的用户以及相关的角色以进行身份验证。角色以递归方式查询 DN,以浏览分层角色结构。登录模块选项包括所选 LDAP JNDI 提供商支持的任何选项。
身份验证以两个步骤进行:
-
使用 bindDN 和 bindCredential 选项实现到 LDAP 服务器的初始绑定。
bindDN
是一个 LDAP 用户,能够同时搜索baseCtxDN
和rolesCtxDN
树以用户和角色搜索。要使用baseFilter
属性指定的过滤器查询要对其进行身份验证的用户 DN。 - 生成的用户 DN 通过将用户 DN 作为主体名称绑定至 LDAP 服务器来验证,回调处理程序获得的密码是主体的凭据。
表 4.3. LdapExtended Login 模块选项
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
baseCtxDN | 完全限定 DN | none | 顶级上下文的固定 DN,用于开始用户搜索。 |
bindCredential | 字符串,可选加密 | none | 用于存储 DN 的凭据。 |
bindDN | 完全限定 DN | none |
用于绑定用户和角色查询的 LDAP 服务器的 DN。此 DN 需要 |
baseFilter | LDAP 过滤器字符串 | none |
用于查找要进行身份验证的用户上下文的搜索过滤器。从登录模块回调获取的输入 |
jaasSecurityDomain | 字符串 | none |
|
rolesCtxDN | 完全限定 DN | none | 用于搜索用户角色的上下文的固定 DN。这不是实际角色所在的 DN,而是包含用户角色的对象的 DN。例如,在 Microsoft Active Directory 服务器中,这是用户帐户所在的 DN。 |
roleFilter | LDAP 过滤器字符串 | none |
个搜索过滤器,用于查找与经过身份验证的用户关联的角色。从登录模块回调获取的输入 |
roleAttributeID | attribute | role | 包含用户角色的属性名称。 |
roleAttributeIsDN | true or false | false |
|
defaultRole | 角色名称 | none | 为所有经过身份验证的用户包含角色 |
parseRoleNameFromDN | true or false | false |
指示查询返回的 DN 是否包含 |
parseUsername | true or false | false |
指示是否为 |
usernameBeginString | 字符串 | none |
定义要从 DN 开头删除的字符串,以显示用户名。这个选项与 |
usernameEndString | 字符串 | none |
定义要从 DN 末尾移除的字符串以显示 |
roleNameAttributeID | attribute | name |
|
distinguishedNameAttribute | attribute | distinguishedName | 包含用户的 DN 的用户条目中的属性名称。如果用户本身的 DN 包含特殊字符(例如,反斜杠),这可能会有必要,从而妨碍正确的用户映射。如果 属性不存在,则使用条目的 DN。 |
roleRecursion | 整数 | 0 | 角色搜索的递归级别数将低于匹配的上下文。通过将此设置为 0 来禁用递归。 |
searchTimeLimit | 整数 | 10000 或 10 秒 | 用户或角色搜索的超时时间(毫秒)。 |
searchScope |
其中之一: |
| 要使用的搜索范围。 |
allowEmptyPasswords | true or false | false |
是否允许空密码。大多数 LDAP 服务器将空密码视为匿名登录尝试。要拒绝空密码,请将其设置为 |
referralUserAttributeIDToCheck | attribute | none |
如果不使用引用,可以忽略这个选项。使用引用时,如果角色对象在引用内,此选项表示包含为特定角色定义的用户的属性名称,如 |
有关连接到 LDAP 服务器和创建初始上下文相关的其他 LDAP 上下文属性的详情,请参考 LDAP 连接选项。
虽然此登录模块确实从其父进程 UsernamePassword Login Module 继承 ignorePasswordCase 选项,但它不会由这一特定登录模块使用。
当您使用带有 跨Ref
对象的 Microsoft Active Directory 创建引用时,您应该考虑 LDAP 登录模块仅为 baseCtxDN
使用一个值,并且只有一个值用于 rolesCtxDN
。因此,初始用户和角色应存储在一个 Microsoft Active Directory 域中,以适应使用 LDAP 引用的可能性。
4.5. AdvancedLdap Login Module
短名称 : AdvancedLdap
全名 : org.jboss.security.negotiation.AdvancedLdapLoginModule
父项???:通用登录模块
AdvancedLdap
登录模块是一个提供额外功能的模块,如 SASL 和使用 JAAS 安全域。如果用户希望在 SPNEGO 身份验证中使用 LDAP,或者在使用 LDAP 服务器时跳过某些身份验证阶段,请考虑使用与 SPNEGO 登录模块链的 AdvancedLdap
登录模块或仅使用 AdvancedLdap
登录模块。
AdvancedLdap
登录模块与 LdapExtended 登录
模块不同:
-
顶级角色仅查询
roleAttributeID
,而不是roleNameAttributeID
。 -
当
roleAttributeIsDN
module 属性设置为false
时,即使recurseRoles
模块选项设为true
,也会禁用递归角色搜索。
表 4.4. AdvancedLdap 登录模块选项
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
bindDN | 完全限定 DN | none |
用于绑定用户和角色查询的 LDAP 服务器的 DN。此 DN 需要 |
bindCredential | 字符串,可选加密 | none | 用于存储 DN 的凭据。 |
jaasSecurityDomain | 字符串 | none |
|
java.naming.provider.url | 字符串 |
如果 | 目录服务器的 URI。 |
baseCtxDN | 完全限定 DN | none | 用作搜索基础的可分辨名称。 |
baseFilter | 代表 LDAP 搜索过滤器的字符串。 | none | 用于缩小搜索结果范围的过滤器。 |
searchTimeLimit | 整数 | 10000 或 10 秒 | 用户或角色搜索的超时时间(毫秒)。 |
roleAttributeID | 代表 LDAP 属性的字符串值。 | none | 包含授权角色名称的 LDAP 属性。 |
roleAttributeIsDN | true or false | false | role 属性是否为可辨识的名称 DN。 |
rolesCtxDN | 完全限定 DN | none | 用于搜索用户角色的上下文的完全限定 DN。 |
roleFilter | LDAP 过滤器字符串 | none |
个搜索过滤器,用于查找与经过身份验证的用户关联的角色。从登录模块回调获取的输入用户名或 userDN 替换成使用 |
recurseRoles | true or false | false |
是否递归搜索 |
roleNameAttributeID | 代表 LDAP 属性的字符串。 | none |
|
referralUserAttributeIDToCheck | attribute | none |
如果不使用引用,可以忽略这个选项。使用引用时,如果角色对象在引用内,此选项表示包含为特定角色定义的用户的属性名称,如 |
searchScope |
其中之一: |
| 要使用的搜索范围。 |
allowEmptyPassword | true or false | false | 是否允许空密码。大多数 LDAP 服务器将空密码视为匿名登录尝试。要拒绝空密码,请将其设置为 false。 |
bindAuthentication | 字符串 |
如果设置了 system 属性 | 用于绑定到目录服务器的 SASL 身份验证类型。 |
有关连接到 LDAP 服务器和创建初始上下文相关的其他 LDAP 上下文属性的详情,请参考 LDAP 连接选项。
当您使用带有 跨Ref
对象的 Microsoft Active Directory 创建引用时,您应该考虑 LDAP 登录模块仅为 baseCtxDN
使用一个值,并且只有一个值用于 rolesCtxDN
。因此,初始用户和角色应存储在一个 Microsoft Active Directory 域中,以适应使用 LDAP 引用的可能性。
4.6. AdvancedAdLdap Login Module
短名称 : AdvancedAdLdap
全名 : org.jboss.security.negotiation.AdvancedADLoginModule
AdvancedAdLdap
登录模块添加与 Microsoft Active Directory 相关的额外参数,但除了 AdvancedLdap Login Module 中的可用选项外没有其他可配置的选项。
有关连接到 LDAP 服务器和创建初始上下文相关的其他 LDAP 上下文属性的详情,请参考 LDAP 连接选项。
4.7. LDAP 连接选项
LDAP 连接信息作为配置选项提供,这些配置选项传递至用于创建 JNDI 初始上下文的环境对象。这些配置选项可以被 Ldap Login Module、LdapExtended Login Module、AdvancedLdap Login Module 和 AdvancedAdap Login 模块使用。
使用的标准 LDAP JNDI 属性包括:
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
java.naming.factory.initial | 类名称 | com.sun.jndi.ldap.LdapCtxFactory | InitialContextFactory 实施类名称. |
java.naming.provider.url | LDAP:// URL | 如果 java.naming.security.protocol 的值为 SSL,ldap://localhost:636,否则为 ldap://localhost:389 | LDAP 服务器的 URL。 |
java.naming.security.authentication | 无、简单或 SASL 机制的名称 |
默认值为 | 用于绑定到 LDAP 服务器的安全级别。 |
java.naming.security.protocol | 传输协议 | 如果未指定,则由提供程序决定。 | 用于安全访问的传输协议,如 SSL。 |
java.naming.security.principal | 字符串 | none | 用于向服务验证调用者的主体名称。这是从下面描述的其他属性构建的。 |
java.naming.security.credentials | 凭证类型 | none | 身份验证方案使用的凭据类型。些示例包括散列化密码、明文密码、密钥或证书。如果未指定此属性,其行为将由服务提供商决定。 |
用户身份验证通过基于登录模块配置选项连接到 LDAP 服务器来执行。连接到 LDAP 服务器的方式是创建一个 InitialLdapContext
,其中包含由 LDAP JNDI 属性组成的环境。实际使用的初始上下文实施取决于配置的初始上下文工厂方法。初始上下文工厂使用 java.naming.factory.initial
属性定义,并从提供的环境属性获取其配置,如 java.naming.provider.url
。这允许将任意属性和相关登录模块选项用于自定义初始上下文工厂。
其他默认常用选项可用于创建 javax.naming.Context 接口 javadoc 中提供的初始上下文。
4.8. LdapUsers Login Module
短名称 :LdapUsers
全名 : org.jboss.security.auth.spi.LdapUsersLoginModule
父名称???:UsernamePassword Login Module
LdapUsers
模块被 LdapExtended 和 AdvancedLdap 模块取代。
4.9. Kerberos 登录模块
短名称 :Kerberos
全名 : org.jboss.security.negotiation.KerberosLoginModule
Kerberos
登录模块使用 GSSAPI 执行 Kerberos 登录身份验证。此登录模块打包了用于 IBM JDK 提供的 JDK 提供的模块 com.sun.security.auth.module.Krb5LoginModule
,用于 Oracle JDK 和 com.ibm.security.auth.module.Krb5LoginModule
,并为凭证委派提供额外的逻辑,并在填充的子项中添加 GSSCredential
。
此模块需要与处理身份验证和角色映射的另一个模块配对。
表 4.5. Kerberos 登录模块选项
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
delegationCredential |
|
|
定义此登录模块如何处理委派。 |
addGSSCredential | 布尔值 | false |
启用将 |
wrapGSSCredential | 布尔值 | false |
指定是否应该包装到对象中添加任何 |
credentialLifetime | 整数 |
|
|
4.10. SPNEGO 登录模块
短名称 :SPNEGO
全名 : org.jboss.security.nego.spnego.SPNEGOLoginModule
父项???:通用登录模块
SPNEGO 登录模块是登录模块的一种实施,通过 KDC 建立呼叫人身份和凭证。该模块实施 SPNEGO、Simple 和 Protected GSSAPI Negotiation 机制,并且是 JBoss Negotiation 项目的一部分。此身份验证可以在与 AdvancedLdap
登录模块的链配置中使用,以允许与 LDAP 服务器协作。
表 4.6. SPNEGO 登录模块选项
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
serverSecurityDomain | 字符串 | null | 定义用于通过 kerberos 登录模块检索服务器服务身份的域。必须设置此属性。 |
removeRealmFromPrincipal | 布尔值 | false | 指定在进一步处理之前,应将 Kerberos 域从主体中删除。 |
usernamePasswordDomain | 字符串 | null | 指定配置中的另一个安全域,它们应在 Kerberos 出现故障时用作故障转移登录。 |
第 5 章 基于证书的登录模块
5.1. 证书登录模块
短名称 : 证书
全名 : org.jboss.security.auth.spi.BaseCertLoginModule
父级???:AbstractServer 登录模块
证书登录模块基于 X509 证书对用户进行身份验证。此登录模块的典型用例是 Web 层中的 CLIENT-CERT
身份验证。此登录模块仅执行身份验证,并且必须与能够获取授权角色的另一登录模块相结合,以完全定义对安全 Web 或 EJB 组件的访问权限。此登录模块的两个子类: CertRoles Login Module
和 DatabaseCert Login Module
扩展行为,以从属性文件或数据库获取授权角色。
表 5.1. 证书登录模块选项
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
securityDomain | 字符串 | 其他 | 为拥有可信证书的信任存储配置了 JSSE 配置的安全域的名称。 |
verifyr | class | none |
用于验证登录证书的 |
5.2. CertificateRoles Login Module
短名称 : CertificateRoles
全名 : org.jboss.security.auth.spi.CertRolesLoginModule
父级???:证书登录模块
CertificateRoles
login 模块使用以下选项添加属性文件中的角色映射功能:
表 5.2. CertificateRoles 登录模块选项
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
rolesProperties | 字符串 | roles.properties |
包含要分配给每个用户的角色的资源或文件的名称。角色属性文件的格式必须是 |
defaultRolesProperties | 字符串 | defaultRoles.properties |
如果无法找到 |
roleGroupSeparator | 个字符. | .(单个句点) |
在 |
5.3. DatabaseCertificate Login 模块
短名称 : DatabaseCertificate
全名 : org.jboss.security.auth.spi.DatabaseCertLoginModule
父级???:证书登录模块
DatabaseCertificate
登录模块通过这些附加选项从数据库表中添加映射功能:
表 5.3. DatabaseCertificate Login 模块选项
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
dsJndiName | JNDI 资源 | java:/DefaultDS | 存储身份验证信息的 JNDI 资源的名称。 |
rolesQuery | 准备 SQL 语句 |
选择 |
为映射角色而要执行的 SQL 准备语句。它应当等同于查询的elect |
suspendResume | true or false | true | 在数据库操作期间是否应该暂停现有的 JTA 事务。 |
transactionManagerJndiName | JNDI 资源 | java:/TransactionManager | 登录模块使用的事务管理器 JNDI 名称。 |
第 6 章 用于 EJB 和移除的登录模块
6.1. 远程登录模块
短名称 :Remoting
全名 :org.jboss.as.security.remoting.RemotingLoginModule
父级???:AbstractServer 登录模块
远程登录
模块允许远程 EJB 调用(通过远程远程)执行基于 SASL 的身份验证。这允许远程用户通过 SASL 建立其身份,并在进行该 EJB 调用时使用该身份进行身份验证和授权。
表 6.1. 远程登录模块选项
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
useClientCert | 布尔值 | false |
如果为 |
6.2. 客户端登录模块
短名称 : Client
全名 : org.jboss.security.ClientLoginModule
客户端登录模块是登录模块的一种实施,供 JBoss EAP 客户端在建立调用者身份和凭据时使用。这会创建一个新的 SecurityContext
,为其分配一个主体和凭证,并将 SecurityContext
设置为 ThreadLocal
安全上下文。客户端登录模块是客户端唯一支持建立当前线程调用者的机制。单机客户端应用和服务器环境均充当尚未配置为以透明方式使用 JBoss EAP 安全
子系统的 JBoss EAP EJB 客户端,必须使用客户端登录模块。
此登录模块不执行任何身份验证。它只是将提供的登录信息复制到服务器 EJB 调用层,以便在服务器上随后进行身份验证。在 JBoss EAP 中,这仅支持将用户身份切换为 JVM 调用。这不支持远程客户端建立身份。
表 6.2. 客户端登录模块选项
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
多线程 | true or false | true | 如果每个线程都有自己的主体和凭证存储,则设置为 true。设置为 false,表示虚拟机中的所有线程共享相同的身份和凭据。 |
password-stacking |
| false |
将 设置为 |
restore-login-identity | true or false | false |
如果 |
第 7 章 关于 PicketLink 登录模块
PicketLink 登录模块通常配置为安全设置的一部分,以使用安全令牌服务(STS)或基于浏览器的 SSO 对用户进行身份验证。STS 可以和登录模块位于同一个容器上,或者通过 Web 服务调用或其他技术远程访问。PicketLink STS 登录模块通过标准 WS-Trust 调用支持非 PicketLink STS 实施。有关安全令牌服务背后的概念以及带 SAML 的基于浏览器的 SSO 的更多详情,请参阅 JBoss EAP 安全架构指南。
7.1. STSIssuingLoginModule
全名 : org.picketlink.identity.federation.core.wstrust.auth.STSIssuingLoginModule
STSIssuingLoginModule 使用用户名和密码根据 STS 验证用户,方法是检索令牌。验证过程如下:
- 调用配置的 STS 并请求安全令牌。在成功收到 RequestedSecurityToken 后,它会将身份验证标记为成功。
对 STS 的调用通常需要身份验证。此登录模块使用以下源之一中的凭证:
- 如果 useOptionsCredentials 模块选项设为 true,则其属性文件。
- 如果将 password-stacking 模块选项设为 useFirstPass,则以前的登录模块凭据。
- 从配置的 CallbackHandler 中提供 Name 和 Password Callback。
-
身份验证成功后,安全令牌通过
org.picketlink.identity.federation.core.wstrust.lm.stsToken
键存储在登录模块的共享映射中。
此登录模块没有可直接配置的属性,但您可以使用模块选项传递配置选项。
STSIssuingLoginModule 示例
<security-domain name="saml-issue-token"> <authentication> <login-module code="org.picketlink.identity.federation.core.wstrust.auth.STSIssuingLoginModule" flag="required"> <module-option name="configFile">./picketlink-sts-client.properties</module-option> <module-option name="endpointURI">http://security_saml/endpoint</module-option> </login-module> </authentication> <mapping> <mapping-module code="org.picketlink.identity.federation.bindings.jboss.auth.mapping.STSPrincipalMappingProvider" type="principal"/> <mapping-module code="org.picketlink.identity.federation.bindings.jboss.auth.mapping.STSGroupMappingProvider" type="role" /> </mapping> </security-domain>
在上例中,指定的 Principal 映射供应商和 RoleGroup 映射供应商会导致填充经过身份验证的 Subject,从而启用 coarse-grained 和基于角色的授权。身份验证后,安全令牌可用,并可用于通过单点登录调用其他服务。
7.2. STSValidatingLoginModule
全名 : org.picketlink.identity.federation.core.wstrust.auth.STSValidatingLoginModule
STSValidatingLoginModule 使用 TokenCallback 从 STS 检索安全令牌。
验证过程如下:
- 调用配置的 STS 并验证可用的安全令牌。
对 STS 的调用通常需要身份验证。此登录模块使用来自以下源之一的凭证:
- 如果 useOptionsCredentials 模块选项设为 true,则其属性文件。
- 如果将 password-stacking 模块选项设为 useFirstPass,则以前的登录模块凭据。
- 从配置的 CallbackHandler 中提供 Name 和 Password Callback。
-
身份验证成功后,安全令牌通过
org.picketlink.identity.federation.core.wstrust.lm.stsToken
键存储在登录模块的共享映射中。
此登录模块没有可直接配置的属性,但您可以使用模块选项传递配置选项。
STSValidatingLoginModule 示例
<security-domain name="saml-validate-token"> <authentication> <login-module code="org.picketlink.identity.federation.core.wstrust.auth.STSValidatingLoginModule" flag="required"> <module-option name="configFile">./picketlink-sts-client.properties</module-option> <module-option name="endpointURI">http://security_saml/endpoint</module-option> </login-module> </authentication> <mapping> <mapping-module code="org.picketlink.identity.federation.bindings.jboss.auth.mapping.STSPrincipalMappingProvider" type="principal"/> <mapping-module code="org.picketlink.identity.federation.bindings.jboss.auth.mapping.STSGroupMappingProvider" type="role"/> </mapping> </security-domain>
上例演示了如何使用直接通过联系 STS 或授予令牌的登录模块来对发布的令牌启用验证,以用于对多个应用和服务进行身份验证。提供 Principal 映射供应商和 RoleGroup 映射供应商会导致填充经过身份验证的对象,从而实现粗粒度和基于角色的授权。身份验证后,安全令牌可用,并可通过单点登录来调用其他服务。
7.3. SAML2STSLoginModule
全名 : org.picketlink.identity.federation.bindings.jboss.auth.SAML2STSLoginModule
验证过程如下:
- 此登录模块向配置的 CallbackHandler 提供 ObjectCallback,并且希望返回 SamlCredential 对象。Assertion 会根据配置的 STS 进行验证。
- 身份验证成功后,将检查 SamlCredential 是否有 NameIDType。
- 如果共享了用户 ID 和 SAML 令牌,在成功验证的另一个登录模块之上堆栈时,此登录模块将绕过验证。
Example SAML2STSLoginModule
<security-domain name="saml-sts" cache-type="default"> <authentication> <login-module code="org.picketlink.identity.federation.bindings.jboss.auth.SAML2STSLoginModule" flag="required" module="org.picketlink"> <module-option name="configFile" value="${jboss.server.config.dir}/sts-config.properties"/> <module-option name="password-stacking" value="useFirstPass"/> </login-module> </authentication> </security-domain>
此登录模块没有可直接配置的属性,但您可以使用模块选项传递配置选项。
7.4. SAML2LoginModule
全名 : org.picketlink.identity.federation.bindings.jboss.auth.SAML2LoginModule
验证过程如下:
- 此登录模块与其他组件一起使用,以进行 SAML 身份验证,并且不自行执行身份验证。
-
由 PicketLink Service Provider Undertow ServletExtension(
org.picketlink.identity.federation.bindings.wildfly.sp.SPServletExtension
)安装的 SAML 身份验证器使用此登录模块根据身份提供程序发出的 SAML 断言来验证用户。 - 如果用户没有适用于服务提供商的 SAML 断言,则会将用户重定向到身份提供程序以获取 SAML 断言。
- 此登录模块用于将用户 ID 和角色传递到要在 JAAS 主题中填充的安全框架。
SAML2LoginModule 示例
<security-domain name="sp" cache-type="default"> <authentication> <login-module code="org.picketlink.identity.federation.bindings.jboss.auth.SAML2LoginModule" flag="required"/> </authentication> </security-domain>
此登录模块没有直接可配置的属性。
SAML2LoginModule
旨在用于使用 PicketLink 和 SAML 的应用,且不应在没有 PicketLink Service Provider Undertow ServletExtension(org.picketlink.identity.federation.bindings.wildfly.spServletExtension)
的情况下使用。这样做会带来可能存在的安全风险,因为 SAML2LoginModule 或
SAML2CommonLoginModule
将始终接受 EMPTY_STR
的默认密码。例如,如果 SP 应用中没有安装 PicketLink Service Provider Undertow ServletExtension,也会发生这种情况。在为 JBoss EAP 配置 SP 应用时,PicketLink Service Provider Undertow ServletExtension 会自动安装。如果 SAML2LoginModule
与其他登录模块堆叠时,也会发生这种情况:
<security-domain name="sp" cache-type="default"> <authentication> <login-module code="org.picketlink.identity.federation.bindings.jboss.auth.SAML2LoginModule" flag="optional"> <module-option name="password-stacking" value="useFirstPass"/> </login-module> <login-module code="UsersRoles" flag="required"> <module-option name="usersProperties" value="users.properties"/> <module-option name="rolesProperties" value="roles.properties"/> <module-option name="password-stacking" value="useFirstPass"/> </login-module> </authentication> </security-domain>
7.5. RegExUserNameLoginModule
全名 : org.picketlink.identity.federation.bindings.jboss.auth.RegExUserNameLoginModule
此登录模块可在任何证书登录模块从主体名称中提取用户名、UID 或其他字段后使用,以便可以从 LDAP 获取角色。模块具有一个名为 regex
的选项,用于指定要应用到主体名称的正则表达式,其结果将传递到后续登录模块。
RegExUserNameLoginModule 示例
<login-module code="org.picketlink.identity.federation.bindings.jboss.auth.RegExUserNameLoginModule" flag="required"> <module-option name="password-stacking" value="useFirstPass"/> <module-option name="regex" value="UID=(.*?),"/> </login-module>
例如,输入主体名称 UID=007、EMAILADDRESS=something@something、CN=James Bond 将导致
使用上述登录模块输出 007
。
有关正则表达式的更多信息,请参见 java.util.regex.Pattern
类文档。
第 8 章 自定义登录模块
如果与 JBoss EAP 安全框架捆绑的登录模块无法满足安全环境的需求,可以编写自定义登录模块实施。org.jboss.security.AuthenticationManager
需要 Subject 主体集的特定使用模式。在编写与 org.jboss.security.AuthenticationManager
兼容的登录模块时,需要全面了解 JAAS 主题类的信息存储功能以及这些功能的预期用法。自定义登录模块必须是 javax.security.auth.spi.LoginModule
的实施。有关创建自定义身份验证模块的更多信息,请参阅 API 文档。
第 9 章 授权模块
以下模块提供授权服务:
Code | class |
---|---|
DenyAll | org.jboss.security.authorization.modules.AllDenyAuthorizationModule |
PermitAll | org.jboss.security.authorization.modules.AllPermitAuthorizationModule |
委派 | org.jboss.security.authorization.modules.DelegatingAuthorizationModule |
Web | org.jboss.security.authorization.modules.web.WebAuthorizationModule |
JACC | org.jboss.security.authorization.modules.JACCAuthorizationModule |
XACML | org.jboss.security.authorization.modules.XACMLAuthorizationModule |
- AbstractAuthorizationModule
-
这是基础授权模块,必须覆盖,并提供委派至其他授权模块的功能。此基础授权模块还为覆盖类提供
delegateMap
属性,允许为特定组件声明委派模块。这可以使更为专业的类来处理每个层的授权,如web
和ejb
等,因为用于授权用户的信息可能会因所访问的资源而异。例如,授权模块可以基于权限,但具有不同的Web
和ejb
资源权限类型。默认情况下,授权模块将强制处理所有可能的资源和权限类型,但配置delegateMap
选项允许该模块委派给不同资源类型的特定类。delegateMap
选项采用以逗号分隔的模块列表,每个模块都带有其相关组件的前缀,例如<module-option name="delegateMap">web=xxx.yyy.Myyy.MyWebDelegate,ejb=xxxx.yyEJBDelegate</module-option>
。
在配置 delegateMap
选项时,每个委派必须实施 authorize(Resource)
方法,并让它像提供的授权模块一样 调用 invocationDelegate(Resource)
方法。如果不这样做,则会导致委派不会被调用。
- AllDenyAuthorizationModule
- 这是一个简单的授权模块,始终拒绝授权请求。没有可用的配置选项。
- AllPermitAuthorizationModule
- 这是一个简单的授权模块,始终允许授权请求。没有可用的配置选项。
- DelegatingAuthorizationModule
- 这是将决策委派给配置委托的默认授权模块。此模块也支持 delegateMap 选项。
- WebAuthorizationModule
- 这是具有默认 Tomcat 授权逻辑的默认 Web 授权模块,允许所有操作。
- JACCAuthorizationModule
-
此模块使用两个委派来实施 JACC 语义:
WebJACCPolicyModuleDelegate
用于 Web 容器授权请求,以及EJB 容器请求的 EJBJACCPolicyModuleDelegate
。此模块也支持delegateMap
选项。
- XACMLAuthorizationModule
-
此模块通过两个代表 Web 和 EJB 容器实施 XACML 授权:
WebXACMLPolicyModuleDelegate
和EJBXACMLPolicyModuleDelegate
。它基于注册的策略创建一个 PDP 对象,并针对它评估 web 或 EJB 请求。此模块也支持delegateMap
选项。
第 10 章 安全映射模块
JBoss EAP 中提供了下列安全映射模块:
class | Code | 类型 |
---|---|---|
org.jboss.security.mapping.providers.role.PropertiesRolesMappingProvider | PropertiesRoles | role |
org.jboss.security.mapping.providers.role.SimpleRolesMappingProvider | SimpleRoles | role |
org.jboss.security.mapping.providers.DeploymentRolesMappingProvider | DeploymentRoles | role |
org.jboss.security.mapping.providers.role.DatabaseRolesMappingProvider | DatabaseRoles | role |
org.jboss.security.mapping.providers.role.LdapRolesMappingProvider | LdapRoles | role |
org.jboss.security.mapping.providers.attribute.LdapAttributeMappingProvider | LdapAttributes | attribute |
org.jboss.security.mapping.providers.DeploymentRoleToRolesMappingProvider | role | |
org.jboss.security.mapping.providers.attribute.DefaultAttributeMappingProvider | attribute |
仅为角色类型映射模块调用映射模块功能。若要调用其他映射模块类型,需要在应用或自定义登录模块中调用映射功能。
10.1. PropertiesRolesMappingProvider
Code: PropertiesRoles
类 : org.jboss.security.mapping.providers.role.PropertiesRolesMappingProvider
类型 :角色
一个 MappingProvider,它使用以下格式从属性文件中读取角色: username=role1,role2,…
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
rolesProperties | 字符串 | roles.properties |
属性格式化的文件名.JBoss EAP 变量的扩展可以 |
10.2. SimpleRolesMappingProvider
Code: SimpleRoles
类 : org.jboss.security.mapping.providers.role.SimpleRolesMappingProvider
类型 :角色
从 options map 中读取角色的简单 MappingProvider
。option 属性名称是分配角色的主体名称,属性值则是要分配给主体的逗号分隔角色名称。
示例
<module-option name="JavaDuke" value="JBossAdmin,Admin"/> <module-option name="joe" value="Users"/>
10.3. DeploymentRolesMappingProvider
Code: DeploymentRoles
类 : org.jboss.security.mapping.providers.DeploymentRolesMappingProvider
类型 :角色
角色映射模块,它将考虑角色映射的主体,可以在 jboss-web.xml 和
部署描述符中完成。
jboss-app.xml
示例
<jboss-web> ... <security-role> <role-name>Support</role-name> <principal-name>Mark</principal-name> <principal-name>Tom</principal-name> </security-role> ... </jboss-web>
10.4. DatabaseRolesMappingProvider
Code: DatabaseRoles
class: org.jboss.security.mapping.providers.role.DatabaseRolesMappingProvider
类型 :角色
从数据库中读取角色的 MappingProvider
。
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
dsJndiName | 字符串 | 用于将角色映射到用户的数据源的 JNDI 名称。 | |
rolesQuery | 字符串 |
此选项应当是与 | |
suspendResume | 布尔值 | true |
如果为 |
transactionManagerJndiName | 字符串 | java:/TransactionManager | 事务管理器 JNDI 名称. |
10.5. LdapRolesMappingProvider
Code: LdapRoles
class: org.jboss.security.mapping.providers.role.LdapRolesMappingProvider
类型 :角色
此映射提供程序使用 LDAP 服务器将角色分配给用户,以搜索角色。
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
bindDN | 字符串 |
用于绑定用户和角色查询的 LDAP 服务器的 DN。此 DN 需要 | |
bindCredential | 字符串 |
| |
rolesCtxDN | 字符串 | 用于搜索用户角色的上下文的固定 DN。这不是实际角色所在的 DN,而是包含用户角色的对象的 DN。例如,在 Microsoft Active Directory 服务器中,这是用户帐户所在的 DN。 | |
roleAttributeID | 字符串 | role | 包含授权角色名称的 LDAP 属性。 |
roleAttributeIsDN | 布尔值 | false |
|
roleNameAttributeID | 字符串 | name |
|
parseRoleNameFromDN | 布尔值 | false |
指示查询返回的 DN 是否包含 |
roleFilter | 字符串 |
个搜索过滤器,用于查找与经过身份验证的用户关联的角色。从登录模块回调获取的输入 | |
roleRecursion | 数字 | 0 | 角色搜索的递归级别数将低于匹配的上下文。通过将此设置为 0 来禁用递归。 |
searchTimeLimit | 数字 | 10000 | 用户/角色搜索的超时时间(毫秒为单位)。 |
searchScope | 字符串 | SUBTREE_SCOPE | 要使用的搜索范围。 |
10.6. LdapAttributeMappingProvider
Code :LdapAttributes
class: org.jboss.security.mapping.providers.attribute.LdapAttributeMappingProvider
type: attribute
将属性从 LDAP 映射到主题.这些选项包括 LDAP JNDI 供应商支持的任何选项。
标准属性名称示例
Context.INITIAL_CONTEXT_FACTORY = "java.naming.factory.initial" Context.SECURITY_PROTOCOL = "java.naming.security.protocol" Context.PROVIDER_URL = "java.naming.provider.url" Context.SECURITY_AUTHENTICATION = "java.naming.security.authentication"
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
bindDN | 字符串 |
用于绑定用户和角色查询的 LDAP 服务器的 DN。此 DN 需要 | |
bindCredential | 字符串 |
bindDN 的密码。如果指定了 | |
baseCtxDN | 字符串 | 用于从其开始用户搜索的上下文的固定 DN。 | |
baseFilter | 字符串 |
用于查找要进行身份验证的用户上下文的搜索过滤器。从登录模块回调获取的输入 | |
searchTimeLimit | 数字 | 10000 | 用户/角色搜索的超时时间(毫秒为单位)。 |
attributeList | 字符串 |
用户的逗号分隔属性列表。例如 | |
jaasSecurityDomain | 字符串 |
用于解密 |
10.7. DeploymentRoleToRolesMappingProvider
类 : org.jboss.security.mapping.providers.DeploymentRoleToRolesMappingProvider
类型 :角色
角色到角色映射模块,它考虑角色到角色映射。这可以在部署描述符 jboss-web.xml
和 jboss-app.xml
中定义。在这种情况下,所有 principal-name
元素都表示要替换 role-name
中的给定角色的角色。Require
示例
<jboss-web> ... <security-role> <role-name>Employee</role-name> <principal-name>Support</principal-name> <principal-name>Sales</principal-name> </security-role> ... </jboss-web>
在上面的示例中,拥有 Employee
角色的用户将此角色替换为" 支持
和销售
"。如果需要让主体保留 Employee
角色并获得 支持
和销售
角色,应添加 <principal-name>Employee</principal-name>
。
这个映射供应商没有与其关联的代码,因此在配置时全类名称必须位于 code
字段中。
10.8. DefaultAttributeMappingProvider
class: org.jboss.security.mapping.providers.attribute.DefaultAttributeMappingProvider
type: attribute
检查模块并从映射上下文中找到主体名称,以便从名为 principalName
+ .email
的模块选项创建属性电子邮件地址并将其映射到给定的主体。
示例
<module-option name="admin.email" value="jduke@redhat.com"/>
在上例中,会为主体 admin
添加值为 jduke@redhat.com
的属性 电子邮件
。
这个映射供应商没有与其关联的代码,因此在配置时全类名称必须位于 code
字段中。
修订了 2022 年 2 月 18 日:26:37 +1000