登录模块参考

Red Hat JBoss Enterprise Application Platform 7.3

列出和描述可用于红帽 JBoss 企业应用平台的登录模块。

摘要

本文档旨在为红帽 JBoss 企业应用平台中的登录模块提供参考。有关 JBoss EAP 中登录模块如何工作的更多信息,请参阅 JBoss EAP 文档的安全架构。

前言

重要

由于引入 Elytron,本指南中描述的登录模块已弃用。有关使用 elytron 子系统的说明,请参阅《 如何配置服务器安全 指南》中的 Elytron Subsystem 部分。

第 1 章 登录模块概述

JBoss EAP 安全架构指南中的安全域部分介绍了登录模块的基础知识及其在安全域中的 使用

1.1. 关于本文档的组织

本文档中涵盖的登录模块被分为以下功能区域:

登录模块功能组织

本指南还提供了相关主题的参考信息,如授权模块、密码堆栈和密码散列。

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 方法。例如,可在 UsersRolesRemoting Login Modules 中使用此配置选项

2.1.2. 密码堆栈

堆栈中可以串联多个登录模块,每一登录模块在身份验证期间提供凭据验证和角色分配。这适用于许多用例,但有时凭据验证和角色分配分散到多个用户管理存储中。

请考虑在中央 LDAP 服务器中管理用户,但应用特定角色存储在应用的关系数据库中的情况。password-stacking 模块选项捕获了这一关系。

要使用密码堆栈,每个登录模块都应将 password-stacking 属性设置为 useFirstPass,它位于 <module-option> 部分中。如果上一配置用于密码堆栈的模块对用户进行了身份验证,所有其他堆栈模块将考虑用户通过身份验证,并且仅尝试为授权步骤提供一组角色。

当 password-stacking 选项设为 useFirstPass 时,此模块首先在属性名 javax.security.auth.login.namejavax.security.auth.login.password 下分别在登录模块共享状态映射中查找共享用户名和密码。

如果找到,这些属性将用作主要名称和密码。如果没有找到,则主体名称和密码由此登录模块设置,并分别存储在属性名称 javax.security.auth.login.namejavax.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

org.jboss.crypto.digest.DigestCallback 的类名称,其中包括用于哈希输入密码的 pre/post 摘要内容(如 salts)。只有在指定了 hashAlgorithmhashUserPassword 设为 true 时才使用。

storeDigestCallback

完全限定类名称

none

org.jboss.crypto.digest.DigestCallback 的类名称,其中包括用于散列存储/预期密码的 pre/post 摘要内容(如 salts)。仅当 hashStorePassword 为 true 并且指定了 hashAlgorithm 时才会使用。

throwValidateError

布尔值

false

指示验证错误是否应该公开给客户端的标志。

inputValidator

完全限定类名称

none

用于验证客户端提供的用户名和密码的 org.jboss.security.auth.spi.InputValidator 实施实例。

注意

与密码散列相关的 UsernamePassword Login Module 选项将在下一节中介绍。

2.2.1. 密码哈希

大多数登录模块必须将客户端提供的密码与用户管理系统中存储的密码进行比较。这些模块通常使用纯文本密码,但可以配置为支持散列密码,以防止纯文本密码存储在服务器端。JBoss EAP 支持配置哈希算法、编码和字符集,以及处理用户密码和存储密码时。

以下是密码哈希选项,可作为登录模块的一部分配置,该模块将 UsernamePassword Login Module 作为父项:

选项类型默认值描述

hashAlgorithm

代表密码哈希算法的字符串。

none

用于哈希密码的 java.security.MessageDigest 算法的名称。没有默认设置,因此必须指定这个选项来启用哈希。典型的值有 SHA-256SHA-1MD5。当指定 hashAlgorithm 并将 hashUserPassword 设为 true 时,在将从 CallbackHandler 获取的明文密码传递到 UsernamePasswordLoginModule.validatePassword 作为 inputPassword 参数之前,将散列化从 CallbackHandler 获取的文本密码。

hashEncoding

字符串

base64

如果也设置了 hashAlgorithm,则哈希密码的字符串格式。可以指定以下三种编码类型之一: base64xx 或 rfc2617

hashCharset

字符串

容器运行时环境中设置的默认编码

将密码字符串转换为字节数组时要使用的 charset/encoding 名称。

hashUserPassword

布尔值

true

指示是否应该散列化用户输入密码的标志。散列化用户密码将与 login 模块中的值进行比较,该值应当是密码的哈希。

hashStorePassword

布尔值

false

指示是否应该将返回的存储密码的标志进行哈希处理。这用于摘要身份验证,用户提交用户密码哈希以及要比较的服务器中特定于请求的令牌。摘要的哈希算法将是 rfc2617,用于计算服务器端哈希,该哈希值应与从客户端发送的散列值匹配。

passwordIsA1Hash

布尔值

 

org.jboss.security.auth.callback.RFC2617Digest 配置为 summary Callback 或 storeDigestCallback 时使用的标志。如果为 true,则不会对传入的密码进行哈希处理,因为它已经散列化。

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

包含用户对密码映射的文件或资源。文件的格式为 username=password

rolesProperties

文件或资源的路径。

roles.properties

包含 user-to-role 映射的文件或资源。该文件的格式为 username=role1,role2,role3

defaultUsersProperties

字符串

defaultUsers.properties

包含用户名到密码映射(用作传递给 usersProperties 属性的默认属性)的属性资源的名称。

defaultRolesProperties

字符串

defaultRoles.properties

包含 username-to-roles 映射的属性名称,该映射将用作传递给 usersProperties 属性的默认属性。

roleGroupSeperator

字符串

.

用于将角色组名称与用户名分开的字符,如 jduke.CallerPrincipal=…​

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 的 namevalue 属性指定用户名和密码。它仅用于测试,不适合于生产环境。

3.5. SecureIdentity Login Module

短名称 :SecureIdentity

全名 : org.picketbox.datasource.security.SecureIdentityLoginModule

父项???:AbstractPasswordCredential Login 模块

SecurityIdentity 登录模块是提供给传统用途的模块。它允许用户加密密码,然后使用加密密码和静态主体。如果应用使用 SecureIdentity,请考虑使用密码库机制。

表 3.3. SecureIdentity 登录模块选项

选项类型默认值描述

username

字符串

none

用于身份验证的用户名。

password

加密的字符串

""

用于身份验证的密码。若要加密密码,可直接在命令行使用模块,如 java org.picketbox.datasource.security.SecureIdentityLoginModule password_to_encrypt,并将此命令的结果粘贴到模块选项的 value 字段中。默认值为空 String。

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

在登录阶段 用作主体 的主体名称。如果没有指定,则使用默认值 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 角色映射到 JohnRoleMapping 登录模块必须定义为登录模块配置的可选模块,因为它会改变之前映射角色的映射。

表 3.7. RoleMapping 登录模块选项

选项类型默认值描述

rolesProperties

属性文件或资源的完全限定文件路径和名称

none

属性文件或资源的完全限定文件路径和名称,用于将角色映射到替换角色。格式为 original_role=role1,role2,role3

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 语句

选择 Password from Principals where PrincipalID=?

准备好的 SQL 查询,用于获取有关主体的信息。

rolesQuery

准备 SQL 语句

none

准备好的 SQL 查询,用于获取有关角色的信息。它应当等同于查询 的elect Role、Role Group from Roles where PrincipalID=?',其中 Role 是角色名称,RoleGroup 列值应当始终是具有大写 RCallerPrincipalRole

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 服务器,它具有权限搜索 baseCtxDNrolesCtxDN 树(通过 JNDI 初始上下文提供)。用户尝试验证时,Ldap 登录模块连接到 LDAP 服务器,并将用户的凭据传递给 LDAP 服务器。

这些凭据通过串联 main DNPrefix、用户输入和 main DNSuffix 组成。例如,请考虑以下情景:

  1. principalDNPrefix 设置为 uid=
  2. 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 DNPrefixprincipalDNSuffix 提示用户输入用户名并构建完全限定的 DN。

principalDNSuffix

字符串

 

添加至用户名的后缀,组成用户 DN。您可以使用 principal DNPrefixprincipalDNSuffix 提示用户输入用户名并构建完全限定的 DN。

rolesCtxDN

完全限定 DN

none

用于搜索用户角色的上下文的完全限定 DN。

userRolesCtxDNAttributeName

attribute

none

user 对象中的 属性,其中包含用于搜索用户角色的上下文的 DN。这与 rolesCtxDN 不同,因为搜索用户角色的上下文可能为每个用户唯一。

roleAttributeID

attribute

角色

包含用户角色的属性名称。

roleAttributeIsDN

true or false

false

roleAttributeID 是否包含角色对象的完全限定 DN。如果为 false,则从上下文名称的 roleNameAttributeId 属性的值获取角色名称。某些目录架构(如 Microsoft Active Directory)要求将此属性设置为 true。

roleNameAttributeID

attribute

name

roleCtxDN 上下文中的属性名称,该上下文中包含角色名称。如果 roleAttributeIsDN 属性设为 true,则此属性用于查找角色对象的 name 属性。

uidAttributeID

attribute

UID

与用户 ID 对应的 UserRolesAttributeDN 中的属性名称。这用于查找用户角色。

matchOnUserDN

true or false

false

搜索用户角色是否应与用户完全区分的 DN 或用户名匹配。如果为 true,则完整用户 DN 将用作匹配值。如果为 false,则只有用户名用作对 uidAttributeName 属性的匹配值。

allowEmptyPasswords

true or false

false

是否允许空密码。大多数 LDAP 服务器将空密码视为匿名登录尝试。要拒绝空密码,请将其设置为 false。

searchTimeLimit

整数

10000 或 10 秒

用户或角色搜索的超时时间(毫秒)。

searchScope

其中之一: OBJECT_SCOPEONELEVEL_SCOPESUBTREE_SCOPE

SUBTREE_SCOPE

要使用的搜索范围。

jaasSecurityDomain

字符串

none

JaasSecurityDomain 的 JMX ObjectName,用于解密 java.naming.security.credentials。加密形式的密码由 解码64(String) 方法返回,该方法在此选项中传递的对象上调用。

注意

有关连接到 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 提供商支持的任何选项。

身份验证以两个步骤进行:

  1. 使用 bindDN 和 bindCredential 选项实现到 LDAP 服务器的初始绑定。bindDN 是一个 LDAP 用户,能够同时搜索 baseCtxDNrolesCtxDN 树以用户和角色搜索。要使用 baseFilter 属性指定的过滤器查询要对其进行身份验证的用户 DN。
  2. 生成的用户 DN 通过将用户 DN 作为主体名称绑定至 LDAP 服务器来验证,回调处理程序获得的密码是主体的凭据。

表 4.3. LdapExtended Login 模块选项

选项类型默认值描述

baseCtxDN

完全限定 DN

none

顶级上下文的固定 DN,用于开始用户搜索。

bindCredential

字符串,可选加密

none

用于存储 DN 的凭据。

bindDN

完全限定 DN

none

用于绑定用户和角色查询的 LDAP 服务器的 DN。此 DN 需要 baseCtxDN 和 rolesCtxDN 值的读取和搜索权限。

baseFilter

LDAP 过滤器字符串

none

用于查找要进行身份验证的用户上下文的搜索过滤器。从登录模块回调获取的输入 用户名userDN 替换到使用 {0} 表达式的任何位置的过滤器中。搜索过滤器的一个常见示例是 (uid={0})。

jaasSecurityDomain

字符串

none

JaasSecurityDomain 的 JMX ObjectName 用于解密密码。

rolesCtxDN

完全限定 DN

none

用于搜索用户角色的上下文的固定 DN。这不是实际角色所在的 DN,而是包含用户角色的对象的 DN。例如,在 Microsoft Active Directory 服务器中,这是用户帐户所在的 DN。

roleFilter

LDAP 过滤器字符串

none

个搜索过滤器,用于查找与经过身份验证的用户关联的角色。从登录模块回调获取的输入 用户名userDN 替换到使用 {0} 表达式的任何位置的过滤器中。经过身份验证的 userDN 被替换成任何使用 {1} 的过滤器。与输入用户名匹配的搜索过滤器示例为 (member={0})。与经过身份验证的 userDN 匹配的另一种方法是 (member={1})。

roleAttributeID

attribute

role

包含用户角色的属性名称。

roleAttributeIsDN

true or false

false

roleAttributeID 是否包含角色对象的完全限定 DN。如果为 false,则从上下文名称的 roleNameAttributeId 属性的值获取角色名称。某些目录架构(如 Microsoft Active Directory)要求将此属性设置为 true

defaultRole

角色名称

none

为所有经过身份验证的用户包含角色

parseRoleNameFromDN

true or false

false

指示查询返回的 DN 是否包含 roleNameAttributeID 的标志。如果设为 true,则为 roleNameAttributeID 检查 DN。如果设置为 false,则不检查 roleNameAttributeID 的 DN。此标志可以提高 LDAP 查询的性能。

parseUsername

true or false

false

指示是否为 用户名 解析 DN 的标志。如果设为 true,则会为用户名解析 DN。如果设置为 false,则不会为用户名解析 DN。这个选项与 usernameBeginString 和 usernameEndString 一起使用。

usernameBeginString

字符串

none

定义要从 DN 开头删除的字符串,以显示用户名。这个选项与 usernameEndString 一起使用,只有在 parseUsername 设为 true 时才会考虑。

usernameEndString

字符串

none

定义要从 DN 末尾移除的字符串以显示 用户名。这个选项与 usernameBeginString 一起使用,只有在 parseUsername 设为 true 时才会考虑。

roleNameAttributeID

attribute

name

roleCtxDN 上下文中的属性名称,该上下文中包含角色名称。如果 roleAttributeIsDN 属性设为 true,则此属性用于查找角色对象的 name 属性。

distinguishedNameAttribute

attribute

distinguishedName

包含用户的 DN 的用户条目中的属性名称。如果用户本身的 DN 包含特殊字符(例如,反斜杠),这可能会有必要,从而妨碍正确的用户映射。如果 属性不存在,则使用条目的 DN。

roleRecursion

整数

0

角色搜索的递归级别数将低于匹配的上下文。通过将此设置为 0 来禁用递归。

searchTimeLimit

整数

10000 或 10 秒

用户或角色搜索的超时时间(毫秒)。

searchScope

其中之一: OBJECT_SCOPEONELEVEL_SCOPESUBTREE_SCOPE

SUBTREE_SCOPE

要使用的搜索范围。

allowEmptyPasswords

true or false

false

是否允许空密码。大多数 LDAP 服务器将空密码视为匿名登录尝试。要拒绝空密码,请将其设置为 false

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 需要 baseCtxDN 和 rolesCtxDN 值的读取和搜索权限。

bindCredential

字符串,可选加密

none

用于存储 DN 的凭据。

jaasSecurityDomain

字符串

none

JaasSecurityDomain 的 JMX ObjectName 用于解密密码。

java.naming.provider.url

字符串

如果 java.naming.security.protocol 的值为 SSL,ldap://localhost:686,否则为 ldap://localhost:389

目录服务器的 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 替换成使用 {0} 表达式的任何位置的过滤器。经过身份验证的 userDN 被替换成任何使用 {1} 的过滤器。与输入用户名匹配的搜索过滤器示例为(member={0})。与经过身份验证的 userDN 匹配的另一种方法是(member={1})。

recurseRoles

true or false

false

是否递归搜索 roleAttributeID 以查找角色。

roleNameAttributeID

代表 LDAP 属性的字符串。

none

roleAttributeID 中包含的 属性,它包含实际的 role 属性。

referralUserAttributeIDToCheck

attribute

none

如果不使用引用,可以忽略这个选项。使用引用时,如果角色对象在引用内,此选项表示包含为特定角色定义的用户的属性名称,如 成员。对照此属性名称的内容检查用户。如果未设置此选项,则检查将始终失败,因此角色对象无法存储在引用树中。

searchScope

其中之一: OBJECT_SCOPEONELEVEL_SCOPESUBTREE_SCOPE

SUBTREE_SCOPE

要使用的搜索范围。

allowEmptyPassword

true or false

false

是否允许空密码。大多数 LDAP 服务器将空密码视为匿名登录尝试。要拒绝空密码,请将其设置为 false。

bindAuthentication

字符串

如果设置了 system 属性 java.naming.security.authentication,它将使用该值,否则默认为 simple

用于绑定到目录服务器的 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

父项AdvancedLdap 登录模块

AdvancedAdLdap 登录模块添加与 Microsoft Active Directory 相关的额外参数,但除了 AdvancedLdap Login Module 中的可用选项外没有其他可配置的选项。

注意

有关连接到 LDAP 服务器和创建初始上下文相关的其他 LDAP 上下文属性的详情,请参考 LDAP 连接选项

4.7. LDAP 连接选项

LDAP 连接信息作为配置选项提供,这些配置选项传递至用于创建 JNDI 初始上下文的环境对象。这些配置选项可以被 Ldap Login Module、LdapExtended Login ModuleAdvancedLdap Login ModuleAdvancedAdap 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 机制的名称

默认值为 simple。如果该属性明确未定义,则行为由服务提供商决定。

用于绑定到 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

此模块需要与处理身份验证和角色映射的另一个模块配对。

重要

下表列出了可用于 org.jboss.security.negotiation.KerberosLoginModule 的选项,但也可以配置 JDK 提供的模块中的选项。有关每个 JDK 模块选项的更多详细信息,请参阅 Oracle 和 IBM Javadocs。

表 4.5. Kerberos 登录模块选项

选项类型默认值描述

delegationCredential

IGNOREREQUIREUSE

IGNORE

定义此登录模块如何处理委派。IGNORE 指定不使用委派凭据并执行普通 Kerberos 身份验证。USE 如果可用于填充主题,则指定使用 GSSCredential,否则退回到标准 Kerberos 身份验证(如果不可用)。REQUIRE 指定使用 GSSCredential 并失败身份验证(如果不可用)。

addGSSCredential

布尔值

false

启用将 GSSCredential 添加到填充对象的专用凭据中。

wrapGSSCredential

布尔值

false

指定是否应该包装到对象中添加任何 GSSCredential 以防止处理。如果没有将 GSSCredential 添加到对象中,则不会起作用。

credentialLifetime

整数

GSSCredential.DEFAULT_LIFETIME

GSSCredential 的生命周期(以秒为单位),负值将设置为 GSSCredential.INDEFINITE_LIFETIME

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 ModuleDatabaseCert Login Module 扩展行为,以从属性文件或数据库获取授权角色。

表 5.1. 证书登录模块选项

选项类型默认值描述

securityDomain

字符串

其他

为拥有可信证书的信任存储配置了 JSSE 配置的安全域的名称。

verifyr

class

none

用于验证登录证书的 org.jboss.security.auth.certs.X509CertificateVerifier 的类名称。

5.2. CertificateRoles Login Module

短名称 : CertificateRoles

全名 : org.jboss.security.auth.spi.CertRolesLoginModule

父级???:证书登录模块

CertificateRoles login 模块使用以下选项添加属性文件中的角色映射功能:

表 5.2. CertificateRoles 登录模块选项

选项类型默认值描述

rolesProperties

字符串

roles.properties

包含要分配给每个用户的角色的资源或文件的名称。角色属性文件的格式必须是 username=role1,role2,其中的用户名是证书的 DN,对任何等号和空格字符进行转义。以下示例格式正确: CN\=unit-tests-client,\ OU\=Red\ Red\ Inc.,\ O\=Red\=Red\ Inc.,\ ST\=North\ Carolina,\ C\=US

defaultRolesProperties

字符串

defaultRoles.properties

如果无法找到 rolesProperties 文件,则回退到的资源或文件的名称。

roleGroupSeparator

个字符.

.(单个句点)

rolesProperties 文件中用作角色组分隔符的哪个字符。

5.3. DatabaseCertificate Login 模块

短名称 : DatabaseCertificate

全名 : org.jboss.security.auth.spi.DatabaseCertLoginModule

父级???:证书登录模块

DatabaseCertificate 登录模块通过这些附加选项从数据库表中添加映射功能:

表 5.3. DatabaseCertificate Login 模块选项

选项类型默认值描述

dsJndiName

JNDI 资源

java:/DefaultDS

存储身份验证信息的 JNDI 资源的名称。

rolesQuery

准备 SQL 语句

选择 Role,RoleGroup from Roles where PrincipalID=?

为映射角色而要执行的 SQL 准备语句。它应当等同于查询的elect Role (RoleGroup from Roles where PrincipalID =?'),其中 Role 是角色名称,RoleGroup 列值应当始终是具有大写 RCallerPrincipalRole

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

如果为 true,登录模块将获得 连接的 SSLSession,并用密码替换对等的 X509Certificate

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

使用FirstPass 或 false

false

将 设置为 使用FirstPass,表示此登录模块应查找存储在 LoginContext 中以用作身份的信息。在使用此模块堆栈其他登录模块时,可以使用此选项。

restore-login-identity

true or false

false

如果 login()方法启动时看到的身份和凭据应在调用 logout() 方法后恢复,则 设置为 true。

第 8 章 自定义登录模块

如果与 JBoss EAP 安全框架捆绑的登录模块无法满足安全环境的需求,可以编写自定义登录模块实施。org.jboss.security.AuthenticationManager 需要 Subject 主体集的特定使用模式。在编写与 org.jboss.security.AuthenticationManager 兼容的登录模块时,需要全面了解 JAAS 主题类的信息存储功能以及这些功能的预期用法。自定义登录模块必须是 javax.security.auth.spi.LoginModule 的实施。有关创建自定义身份验证模块的更多信息,请参阅 API 文档。

第 9 章 授权模块

以下模块提供授权服务:

Codeclass

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 属性,允许为特定组件声明委派模块。这可以使更为专业的类来处理每个层的授权,如 webejb 等,因为用于授权用户的信息可能会因所访问的资源而异。例如,授权模块可以基于权限,但具有不同的 Webejb 资源权限类型。默认情况下,授权模块将强制处理所有可能的资源和权限类型,但配置 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 授权: WebXACMLPolicyModuleDelegateEJBXACMLPolicyModuleDelegate。它基于注册的策略创建一个 PDP 对象,并针对它评估 web 或 EJB 请求。此模块也支持 delegateMap 选项。

第 10 章 安全映射模块

JBoss EAP 中提供了下列安全映射模块:

classCode类型

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 变量的扩展可以 ${jboss.variable} 的形式使用。

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

字符串

 

此选项应当是与 从 Role where User=? 选择 RoleName 等效的准备语句。?? 替换为当前主体名称。

suspendResume

布尔值

true

如果为 true,则 在执行角色搜索时将挂起并稍后恢复与当前线程相关的事务。

transactionManagerJndiName

字符串

java:/TransactionManager

事务管理器 JNDI 名称.

10.5. LdapRolesMappingProvider

Code: LdapRoles

class: org.jboss.security.mapping.providers.role.LdapRolesMappingProvider

类型 :角色

此映射提供程序使用 LDAP 服务器将角色分配给用户,以搜索角色。

选项类型默认值描述

bindDN

字符串

 

用于绑定用户和角色查询的 LDAP 服务器的 DN。此 DN 需要 baseCtxDN 和 rolesCtxDN 值的读取和搜索权限。

bindCredential

字符串

 

bindDN 的密码。这可以通过密码库机制加密。

rolesCtxDN

字符串

 

用于搜索用户角色的上下文的固定 DN。这不是实际角色所在的 DN,而是包含用户角色的对象的 DN。例如,在 Microsoft Active Directory 服务器中,这是用户帐户所在的 DN。

roleAttributeID

字符串

role

包含授权角色名称的 LDAP 属性。

roleAttributeIsDN

布尔值

false

roleAttributeID 是否包含角色对象的完全限定 DN。如果为 false,则从上下文名称的 roleNameAttributeId 属性的值获取角色名称。某些目录架构(如 Microsoft Active Directory)要求将此属性设置为 true

roleNameAttributeID

字符串

name

roleCtxDN 上下文中的属性名称,该上下文中包含角色名称。如果 roleAttributeIsDN 属性设为 true,则此属性用于查找角色对象的 name 属性。

parseRoleNameFromDN

布尔值

false

指示查询返回的 DN 是否包含 roleNameAttributeID 的标志。如果设为 true,则为 roleNameATtributeID 检查 DN。如果设置为 false,则不检查 roleNameAttributeID 的 DN。此标志可以提高 LDAP 查询的性能。

roleFilter

字符串

 

个搜索过滤器,用于查找与经过身份验证的用户关联的角色。从登录模块回调获取的输入 用户名userDN 替换到使用 {0} 表达式的任何位置的过滤器中。与输入 用户名匹配的搜索过滤器示例为 (member={0})。

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 需要 baseCtxDN 和 rolesCtxDN 值的读取和搜索权限。

bindCredential

字符串

 

bindDN 的密码。如果指定了 jaasSecurityDomain,则可以对此加密。

baseCtxDN

字符串

 

用于从其开始用户搜索的上下文的固定 DN。

baseFilter

字符串

 

用于查找要进行身份验证的用户上下文的搜索过滤器。从登录模块回调获取的输入 用户名userDN 被替换成过滤器,使用 {0} 表达式。这个替换行为来自于标准的 DirContext.search(Name, String, Object[], SearchControls cons) 方法。搜索过滤器的常见示例为 (uid={0})。

searchTimeLimit

数字

10000

用户/角色搜索的超时时间(毫秒为单位)。

attributeList

字符串

 

用户的逗号分隔属性列表。例如 mail,cn,sn,employeeType,employeeNumber

jaasSecurityDomain

字符串

 

用于解密 java.naming.security.credentials 的 JaasSecurityDomain。加密形式的密码由 JaasSecurityDomain#decode64(String) 方法返回。org.jboss.security.plugins.PBEUtils 也可以用于生成加密的形式。

10.7. DeploymentRoleToRolesMappingProvider

: org.jboss.security.mapping.providers.DeploymentRoleToRolesMappingProvider

类型 :角色

角色到角色映射模块,它考虑角色到角色映射。这可以在部署描述符 jboss-web.xmljboss-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