第 12 章 安全管理引用

12.1. 包括的验证模块

JBoss EAP 6 里包含了下面的验证模块。其中一些模块处理授权及验证。这些模块的 Code 名称通常包含 Role
当你配置这些模块时,请使用 Code 值或完整名称(软件包限定)来引用模块。

表 12.1. RealmDirect

Code
RealmDirect
org.jboss.as.security.RealmDirectLoginModule
描述
直接和安全区交互的登录模块实现。这个登录模块允许将所有和后备存储的交互委托给安全区,从而不需要任何重复和同步的定义。它适用于远程调用和管理接口。

表 12.2. RealmDirect 模块选项

选项 类型 默认值 描述
realm
字符串
ApplicationRealm
期望的区的名称。

表 12.3. Client

Code
Client
org.jboss.security.ClientLoginModule
描述
这个登录模块的目的是当 JBoss EAP 6 充当客户时建立调用者标识符和凭证。它不应该作为用于服务器验证的安全域的一部分。

表 12.4. Client 模块选项

选项 类型 默认值 描述
multi-threaded
truefalse
false
如果每个线程都有自己的 principal 和凭证存储,请将其设置为 true。false 则指定虚拟机里的所有线程都共享系统的标识符和凭证。
password-stacking
useFirstPassfalse
false
设置为 useFirstPass 表示这个登录模块应该寻找存储在 LoginContext 里的信息以用作标识符。当堆积这个登录模块和其他模块时可以使用这个选项。
restore-login-identity
truefalse
false
如果在 login() 方法的开始遇到的标识符和凭证在 logout() 被调用后要重新存储,请将其设置为 true。

表 12.5. Remoting

Code
Remoting
org.jboss.as.security.remoting.RemotingLoginModule
描述
这个登录模块用于检查当前验证的的请求是否是从远程连接接收的,如果是则使用在远程验证过程中创建的标识符并和当前请求相关联。如果这个请求不是通过远程连接到达的,这个模块将不会做任何事情,并允许基于 JAAS 的登录继续,进入下一个模块。

表 12.6. Remoting 模块选项

选项 类型 默认值 描述
password-stacking
useFirstPassfalse
false
useFirstPass 的值表示这个登录模块应该首先查看存储在 LoginContext 里关于这个标识符的信息。当堆积这个登录模块和其他模块时可以使用这个选项。
principalClass
全限定类名。
包含一个将 String 参数用作主体(Principal)名称的构造器的 Principal 实现类。
unauthenticatedIdentity
主体名称。
定义分配给不包含验证信息的请求的主体名称。这允许不受保护的 servlet 调用不要求专有角色的 EJB 上的方法。这样的主体没有关联的角色且只访问未设置安全性的 EJB 或者和 unchecked permission 约束关联的 EJB。

表 12.7. Certificate

Code
Certificate
org.jboss.security.auth.spi.BaseCertLoginModule
描述
这个登录模块的目的是基于 X509 Certificates 验证用户。其中一个用例是 web 应用程序的 CLIENT-CERT 验证。

表 12.8. Certificate Module Options

选项 类型 默认值 描述
securityDomain
字符串
具有持有信任证书的信任库的 JSSE 配置的安全域的名称。
verifier
用户登录证书检验的 org.jboss.security.auth.certs.X509CertificateVerifier 的类名。

表 12.9. CertificateRoles

Code
CertificateRoles
org.jboss.security.auth.spi.CertRolesLoginModule
描述
这个登录模块扩展了 Certificate 登录模块以从属性文件添加角色映射能力。它使用和 Certificate 登录模块相同的所有选项,并添加了如下选项。

表 12.10. CertificateRoles 模块选项

选项 类型 默认值 描述
rolesProperties
字符串
roles.properties
包含分配给每个用户的资源或文件的名称。角色属性文件里的格式必须是 username=role1,role2,其中 username 是证书的 DN,不包括任何 =(等号)和空格字符。下面的例子是正确的格式:
CN\=unit-tests-client,\ OU\=Red\ Hat\ Inc.,\ O\=Red\ Hat\ Inc.,\ ST\=North\ Carolina,\ C\=US
defaultRolesProperties
字符串
defaultRoles.properties
如果未找到 rolesProperties 文件所使用的资源或文件的名称。
roleGroupSeparator
单个字符。
. (单一句号)
用作 rolesProperties 文件里角色组分隔符的字符。

表 12.11. Database

Code Database
org.jboss.security.auth.spi.DatabaseServerLoginModule
描述
支持验证和角色映射的基于 JDBC 的登录模块。这基于具有下列定义的两个逻辑表。
  • Principals: PrincipalID (text), Password (text)
  • Roles: PrincipalID (text), Role (text), RoleGroup (text)

表 12.12. Database 模块选项

选项 类型 默认值 描述
digestCallback
全限定类名
包括 pre/post 摘要内容(如对输入密码哈希加密的 salt)的 DigestCallback 实现的类名。它只有在已指定 hashAlgorithm 时才会被使用。
dsJndiName
JNDI 资源
保存验证信息的 JNDI 资源的名称。这个选项是必需的。
hashAlgorithm
String
使用明文密码
用于哈希加密密码的消息摘要算法。所支持的算法依赖于 Java 安全提供者,但下列算法都是被支持的:MD5SHA-1SHA-256
hashCharset
String
平台的默认编码
转换密码字符串为字节队列所使用的字符集/编码的名称。其值包括所有被支持的 Java 字符集名称。
hashEncoding
String
Base64
所使用的字符串编码格式。
ignorePasswordCase
布尔值
false
指定密码比较是否应该忽略大小写的标记。
inputValidator
全限定类名
用于检验客户提供的用户和密码的 InputValidator 实现的实例。
principalsQuery
prepared SQL 语句
select Password from Principals where PrincipalID=?
获取 principal 的信息的 prepared SQL 查询。
rolesQuery
prepared SQL 语句
获取角色信息的 prepared SQL 查询。它应该和 select Role, RoleGroup from Roles where PrincipalID=? 相等,这里的 Role 是角色名称而 RoleGroup 的值总是带有大写 RRolesCallerPrincipal
storeDigestCallback
全限定类名
The class name of the DigestCallback implementation that includes pre/post digest content like salts for hashing the store/expected password. Only used if hashStorePassword or hashUserPassword is true and hashAlgorithm has been specified.
suspendResume
布尔值
true
在数据库操作期间现有的 JTA 事务是否应该被暂停。
throwValidatorError
布尔值
false
指定检验错误是否应该开放给客户的标记
transactionManagerJndiName
JNDI 资源
java:/TransactionManager
登录模块使用的事务管理者的 JNDI 名称。

表 12.13. DatabaseCertificate

Code
DatabaseCertificate
org.jboss.security.auth.spi.DatabaseCertLoginModule
描述
这个登录模块扩展了 Certificate 登录模块以从数据库表添加角色映射能力。它使用和 Certificate 登录模块相同的所有选项,并添加了如下选项。

表 12.14. DatabaseCertificate 模块选项

选项 类型 默认值 描述
dsJndiName
JNDI 资源
保存验证信息的 JNDI 资源的名称。这个选项是必需的。
rolesQuery
prepared SQL 语句
select Role,RoleGroup from Roles where PrincipalID=?
为了映射角色的 prepared SQL 语句。它应该和 select Role, RoleGroup from Roles where PrincipalID=? 相等,这里的 Role 是角色名称而 RoleGroup 的值总是带有大写 RRolesCallerPrincipal
suspendResume
truefalse
true
在数据库操作期间现有的 JTA 事务是否应该被暂停。

表 12.15. Identity

Code
Identity
org.jboss.security.auth.spi.IdentityLoginModule
描述
关联这个模块选项里指定的 principal 和任何针对这个模块验证的主题。所使用的 Principal 类的类型是 org.jboss.security.SimplePrincipal。如果没有指定 principal 选项,那使用的名称是 guest

表 12.16. Identity 模块选项

选项 类型 默认值 描述
principal
String
guest
用于 principal 的名称。
roles
用逗号隔开的字符串的列表
将分配给主题的用逗号隔开的角色列表。

表 12.17. Ldap

Code
Ldap
org.jboss.security.auth.spi.LdapLoginModule
描述
当用户名和密码存储在可通过 JNDI LDAP 供应商访问的 LDAP 服务器上时进行的验证。许多选项不是必需的,因为它们可由 LDAP 供应商或系统环境来决定。

表 12.18. Ldap 模块选项

选项 类型 默认值 描述
java.naming.factory.initial
类名
com.sun.jndi.ldap.LdapCtxFactory
InitialContextFactory 实现的类名。
java.naming.provider.url
ldap:// URL
LDAP 服务器的 URL。
java.naming.security.authentication
nonesimple 或 SASL 机制的名称。
simple
用于绑定 LDAP 服务器的安全级别。
java.naming.security.protocol
传输协议
如果未指定,则由供应商决定。
用于安全访问的传输协议,如 SSL。
java.naming.security.principal
字符串
用于验证调用者的 principal 的名称。它是根据下面描述的属性构建的。
java.naming.security.credentials
凭证类型
验证模式使用的凭证类型。其中一些例子包括哈希密码、明文密码、密钥或证书。如果没有指定这个属性,其行为将由服务供应商决定。
principalDNPrefix
字符串
添加到用户名以组成用户 DN 的前缀。你可以提示用户输入用户名并使用 principalDNPrefixprincipalDNSuffix 构建全限定 DN。
principalDNSuffix
字符串
添加到用户名以组成用户 DN 的后缀。你可以提示用户输入用户名并使用 principalDNPrefixprincipalDNSuffix 构建全限定 DN。
useObjectCredential
truefalse
false
凭证是否应该用 org.jboss.security.auth.callback.ObjectCallback 类型的回调方法作为不透明的对象、还是用 JAAS PasswordCallback 作为 char[](字符数组)密码获得。这允许传递 non-char[](非字符数组)凭证信息到 LDAP 服务器。
rolesCtxDN
全限定的 DN
用于搜索用户角色的上下文的全限定 DN。
userRolesCtxDNAttributeName
attribute
包含搜索用户角色的上下文 DN 的用户对象里的属性。它和 rolesCtxDN 的区别是搜索用户角色的上下文可能对于每个用户都是唯一的。
roleAttributeID
attribute
roles
包含用户角色的属性的名称。
roleAttributeIsDN
truefalse
false
roleAttributeID 是否包含角色对象的全限定 DN。如果为 false,角色名将从上下文名称的 roleNameAttributeId 属性值里获取。某些目录模式,如 Microsoft Active Directory,要求这个属性的值为 true
roleNameAttributeID
attribute
name
包含角色名称的 roleCtxDN 上下文里的属性的名称。如果 roleAttributeIsDN 属性为 true,这个属性将被用来查找角色对象的 name 属性。
uidAttributeID
attribute
uid
UserRolesAttributeDN 里对应用户 ID 的属性的名称。它被用来定位用户角色。
matchOnUserDN
truefalse
false
对用户角色搜索是否应该匹配用户的全限定 DN 或只是用户名而已。如果为true,完整的用户 DN 将作为匹配值。如果为 false,则只使用用户名来匹配 uidAttributeName 属性。
allowEmptyPasswords
truefalse
false
是否允许空的密码。多数 LDAP 服务器将空密码视同匿名登录尝试。要拒绝空密码,请将它设置为 false

表 12.19. LdapExtended

Code
LdapExtended
org.jboss.security.auth.spi.LdapExtLoginModule
描述
另外的一个使用搜索来定位绑定用户和关联角色的 LDAP 登录模块实现。角色队列递归地解析 DN 来导航分层的角色结构。它使用和 LDAP 模块相同的 java.naming 选项以及下列 LDAP 模块没有的选项。
这个验证以两步进行:
  1. 对 LDAP 服务器的初始绑定是使用 bindDN 和 bindCredential 选项来完成的。bindDN 是一个具有搜索 baseCtxDN 和 rolesCtxDN 树里的用户和角色能力的 LDAP 用户。要验证的用户 DN 是通过 baseFilter 属性指定的过滤器来进行查询的。
  2. 结果用户 DN 是通过将用户 DN 作为 InitialLdapContext 环境的 Context.SECURITY_PRINCIPAL 绑定到 LDAP 服务器来验证的。Context.SECURITY_CREDENTIALS 属性被设置为回调处理程序获得的 String 型的密码。

表 12.20. LdapExtended 模块选项

选项 类型 默认值 描述
baseCtxDN
全限定的 DN
开始用户搜索的顶层上下文的固定 DN。
bindCredential
字符串,可以进行加密。
更多信息请参考《JBoss EAP 安全指南》
bindDN
全限定的 DN
用户和角色查询里用来绑定 LDAP 服务器的 DN。这个 DN 需要读取和搜索 baseCtxDNrolesCtxDN 值上的权限。
baseFilter
LDAP 过滤器字符串
用来定位要验证的用户的上下文的搜索过滤器。从登录模块回调方法里获得的输入用户名或 userDN 将替换至过滤器里的 {0} 表达式。搜索过滤器的一个常见例子是 (uid={0})
rolesCtxDN
全限定的 DN
用于搜索用户角色的上下文的固定 DN。这不是实际角色的 DN,它是包含用户角色的对象所在的 DN。例如,在 Microsoft Active Directory 服务器里,它是用户帐号所在的 DN。
roleFilter
LDAP 过滤器字符串
用来定位和验证用户相关联的角色的搜索过滤器。从登录模块回调方法里获得的输入用户名和 userDN 将被替换过滤器里的 {0} 表达式。已验证的 userDN 将替换过滤器里的 {1} 表达式。匹配输入用户名的搜索过滤器示例是 (member={0})。对应已验证的 userDN 的例子是 (member={1})
roleAttributeIsDN
truefalse
false
roleAttributeID 是否包含角色对象的全限定 DN。如果为 false,角色名将从上下文名称的 roleNameAttributeId 属性值里获取。某些目录模式,如 Microsoft Active Directory,要求这个属性的值为 true
defaultRole
角色名称
用于所有已验证用户的角色
parseRoleNameFromDN
truefalse
false
指定查询返回的 DN 是否包含 roleNameAttributeID。如果设置为 true,将检查 DN 里是否有 roleNameATtributeID,如果为 false,将不会检查。这个标记可以提高 LDAP 查询的性能。
parseUsername
truefalse
false
指定 DN 是否对用户名进行解析的标记。如果为 true,DN 将对用户名进行解析。如果为 false,DN 将不对用户名进行解析。这个选项是和 usernameBeginString 及 usernameEndString 一起使用的。
usernameBeginString
字符串
定义将从 DN 的开头删除以显示用户名的字符串。这个选项是和 usernameEndString 一起使用的。
usernameEndString
字符串
定义将从 DN 的结尾删除以显示用户名的字符串。这个选项是和 usernameBeginString 一起使用的。
roleNameAttributeID
attribute
name
包含角色名称的 roleCtxDN 上下文里的属性的名称。如果 roleAttributeIsDN 属性为 true,这个属性将被用来查找角色对象的 name 属性。
distinguishedNameAttribute
attribute
distinguishedName
包含用户 DN 的用户条目里的属性的名称。如果用户自身的 DN 包含特殊字符(如反斜杠)而阻止了正确的用户映射,这就是有必要的。如果这个属性不存在,条目的 DN 将会被使用。
roleRecursion
整数
0
角色搜索的递归级别数。禁用递归可将其设置为 0
searchTimeLimit
整数
10000 (10 秒)
用户或角色搜索的超时时间(毫秒)。
searchScope
OBJECT_SCOPE, ONELEVEL_SCOPE, SUBTREE_SCOPE 中的一个
SUBTREE_SCOPE
使用的搜索作用域
allowEmptyPasswords
truefalse
false
是否允许空的密码。多数 LDAP 服务器将空密码视同匿名登录尝试。要拒绝空密码,请将它设置为 false。
referralUserAttributeIDToCheck
attribute
如果您没有使用 Referral,这个选项可被忽略。在使用 Referral 时,如果角色对象位于 Referral 内部,这个选项表示包含为某个角色(例如,member)定义的用户的属性名称。用户将根据这个属性名称的上下文进行检查。如果没有设置这个选项,检查总是会失败,所以角色对象无法存储在 Referral 树里。

表 12.21. RoleMapping

Code
RoleMapping
org.jboss.security.auth.spi.RoleMappingLoginModule
描述
映射作为验证过程的最终结果的角色到声明式角色。当你添加这个模块到安全域里时,它必须标记为 optional

表 12.22. RoleMapping 模块选项

选项 类型 默认值 描述
rolesProperties
属性文件或资源的全限定文件路径
none
映射角色到替代角色的属性文件或资源的全限定文件路径。其格式是 original_role=role1,role2,role3
replaceRole
truefalse
false
是否添加当前的角色,或者用映射的角色替换当前的角色。设为 true 则进行替换。

注意

对于 RoleMapping,rolesProperties 模块选项是必需的。

表 12.23. RunAs

Code
RunAs
org.jboss.security.auth.spi.RunAsLoginModule
描述
这是一个 Helper 模块,它在验证的登录阶段将 run as 角色推入栈,并在提交或中止阶段从栈里弹出 run as 角色。这个登录模块为其他必须访问安全资源以执行验证的登录模块(如访问安全 EJB 的登录模块)提供了一个角色。在要求 run as 角色的登录模块建立之前,你必须先配置好 RunAsLoginModule

表 12.24. RunAs 选项

选项 类型 默认值 描述
roleName
角色名称
nobody
在登录阶段用作 run as 角色的角色的名称。
principalName
主体名称
nobody
登录阶段用作 run as 主体的主体名称。如果没有指定,则使用默认值 nobody
principalClass
全限定类名。
包含一个将 String 参数用作主体(Principal)名称的构造器的 Principal 实现类。

表 12.25. Simple

Code
Simple
org.jboss.security.auth.spi.SimpleServerLoginModule
描述
用于测试目的的快速设置安全性的模块。它实现了下列简单的算法:
  • 如果密码为 null,验证用户并分配一个 guest 标识符和 guest 角色。
  • 否则,如果密码和用户相同,分配一个和用户名相同的标识符以及 adminguest 角色。
  • 否则,验证将会失败。
Simple 模块选项

Simple 模块没有选项。

表 12.26. ConfiguredIdentity

Code
ConfiguredIdentity
org.picketbox.datasource.security.ConfiguredIdentityLoginModule
描述
关联这个模块选项里指定的 principal 和任何针对这个模块验证的主题。所使用的 Principal 类的类型是 org.jboss.security.SimplePrincipal

表 12.27. ConfiguredIdentity 模块选项

选项 类型 默认值 描述
username
字符串 用于验证的用户名。
password
加密的字符串 ""
用于验证的密码。要加密这个密码,请在命令行直接使用这个模块。
java org.picketbox.datasource.security.SecureIdentityLoginModule password_to_encrypt
将这个命令的运行结果粘贴到模块选项的 value 字段。默认值是一个空字符串。
principal
主体的名称
none
将和针对这个模块验证的任何主题关联的 principal。

表 12.28. SecureIdentity

Code
SecureIdentity
org.picketbox.datasource.security.SecureIdentityLoginModule
描述
提供这个模块只是为了和之前的系统兼容。它允许你加密密码并和静态 principal 一起使用这个密码。如果你的应用程序使用了 SecureIdentity,请考虑使用密码库机制。

表 12.29. SecureIdentity 模块选项

选项 类型 默认值 描述
username
字符串 用于验证的用户名。
password
加密的字符串 ""
用于验证的密码。要加密这个密码,请在命令行直接使用这个模块。
java org.picketbox.datasource.security.SecureIdentityLoginModule password_to_encrypt
将这个命令的运行结果粘贴到模块选项的 value 字段。默认值是一个空字符串。
managedConnectionFactoryName
JCA 资源
数据源的 JCA 连接工厂的名称。

表 12.30. PropertiesUsers

Code
PropertiesUsers
org.jboss.security.auth.spi.PropertiesUsersLoginModule
描述
使用一个属性文件来存储用户名和密码。它没有提供授权(角色映射)。这个模块只适合于测试用途。

表 12.31. SimpleUsers

Code
SimpleUsers
org.jboss.security.auth.spi.SimpleUsersLoginModule
描述
这个登录模块使用 module-option 保存用户名和明文密码。 module-optionnamevalue 属性指定了用户名和密码。它只是用于测试目的,不适合用于产品环境里。

表 12.32. LdapUsers

Code
LdapUsers
org.jboss.security.auth.spi.LdapUsersLoginModule
描述
LdapUsers 模块被 ExtendedLDAPAdvancedLdap 模块取代。

表 12.33. Kerberos

Code
Kerberos
com.sun.security.auth.module.Krb5LoginModule
描述
用 GSSAPI 执行Kerberos 登录验证。这个模块不是 Sun Microsystems 提供的 API 里的安全框架的一部分。细节可以在 http://docs.oracle.com/javase/7/docs/jre/api/security/jaas/spec/com/sun/security/auth/module/Krb5LoginModule.html 里找到。这个模块需要和另外一个处理验证和角色映射的模块配对。

表 12.34. Kerberos 模块选项

选项 类型 默认值 描述
storekey
truefalse
false
是否添加 KerberosKey 到主题的私有凭证。
doNotPrompt
truefalse
false
如果设置为 true,用户将不会被提示输入密码。
useTicketCache
布尔值,truefalse
.
false
如果为 true,TGT 将从票据缓存里获取。如果为 false,将不会使用票据缓存。
ticketcache
代表 Kerberos 票据缓存的文件或资源。
默认值取决于你所使用的操作系统。
  • 红帽企业版 Linux / Solaris: /tmp/krb5cc_uid,使用操作系统的数字 UID 值。
  • Microsoft Windows Server: 使用 Local Security Authority (LSA) API 来查找票据缓存。
票据缓存的位置。
useKeyTab
truefalse
false 是否从密钥表文件里获取 principal 的密钥。
keytab
代表 Kerberos keytab 的文件或资源。
操作系统的 Kerberos 配置文件的位置,或者 /home/user/krb5.keytab
密钥表文件的位置。
principal
字符串
Principal 的名称。这可以是简单的用户名或服务名,如 host/testserver.acme.com。或者当密钥表包含多个 principal 时,使用它而不是从密钥表里获取 principal。
useFirstPass
truefalse
false
是否以从 javax.security.auth.login.namejavax.security.auth.login.password 为关键字从模块的共享状态获取用户名和密码。如果验证失败,不会进行重试。
tryFirstPass
truefalse
false
useFirstPass 相同,但如果验证失败,模块将使用 CallbackHandler 来获取新的用户名和密码。如果第二次验证失败,将报告给调用的应用程序。
storePass
truefalse
false
是否在模块的共享状态里保存用户名和密码。如果关键字已存在于共享内存里,或者验证失败的话,这都不会发生。
clearPass
truefalse
false
设置它为 true 在两个验证阶段都完成后从共享内存里清除用户名和密码。

表 12.35. SPNEGO

Code
SPNEGO
org.jboss.security.negotiation.spnego.SPNEGOLoginModule
描述
允许在 Microsoft Active Directory 服务器或其他支持 SPNEGO 的环境里进行 SPNEGO 验证。SPNEGO 也可以包含 Kerberos 凭证。这个模块需要和另外一个处理验证和角色映射的模块配对。

表 12.36. SPNEGO 模块选项

选项 类型 默认值 描述
serverSecurityDomain
string
null.
定义通过 kerberos 登录模块获取服务器服务的标识符所使用的域。这个属性是必须设置的。
removeRealmFromPrincipal
boolean
false
指定在进一步处理前,应该从主体删除 kerberos 区。
usernamePasswordDomain
string
null
指定当 Kerberos 验证失败时用作失效切换登录模块的其他安全域。

表 12.37. AdvancedLdap

Code AdvancedLdap
org.jboss.security.negotiation.AdvancedLdapLoginModule
描述
提供额外功能的模块,如 SASL 和对 JAAS 安全域的使用。

表 12.38. AdvancedLdap 模块选项

选项 类型 默认值 描述
bindAuthentication
字符串
用于绑定到目录服务器的 SASL 验证的类型。
java.naming.provider.url
string
目录服务器的 URI.
baseCtxDN
全限定的 DN
要用作搜索基础的标识名。
baseFilter
代表 LDAP 搜索过滤器的字符串。
用于缩减搜索结果的过滤器。
roleAttributeID
代表 LDAP 属性的字符串值。
包含授权角色的名称的 LDAP 属性。
roleAttributeIsDN
truefalse
false
这个角色属性是否是标识名(Distinguished Name,DN)。
roleNameAttributeID
代表 LDAP 属性的字符串。
包含实际角色属性的 RoleAttributeId 里所包含的属性。
recurseRoles
truefalse
false
是否在 RoleAttributeId 里递归地搜索角色。
referralUserAttributeIDToCheck
attribute
如果您没有使用 Referral,这个选项可被忽略。在使用 Referral 时,如果角色对象位于 Referral 内部,这个选项表示包含为某个角色(例如,member)定义的用户的属性名称。用户将根据这个属性名称的上下文进行检查。如果没有设置这个选项,检查总是会失败,所以角色对象无法存储在 Referral 树里。

表 12.39. AdvancedADLdap

Code AdvancedADLdap
org.jboss.security.negotiation.AdvancedADLoginModule
描述
这个模块扩展了 AdvancedLdap 登录模块,并添加额外的和 Microsoft Active Directory 相关的参数。

表 12.40. UsersRoles

Code UsersRoles
org.jboss.security.auth.spi.UsersRolesLoginModul
描述
支持存储在两个不同属性文件里的多个用户和角色的简单登录模块。

表 12.41. UsersRoles 模块选项

选项 类型 默认值 描述
usersProperties
文件或资源的路径。
users.properties
包含用户-密码映射的文件或资源。这个文件的格式是 username=password
rolesProperties
文件或资源的路径。
roles.properties
包含用户-角色映射的文件或资源。这个文件的格式是 username=role1,role2,role3
password-stacking
useFirstPassfalse
false
useFirstPass 的值表示这个登录模块应该首先查看存储在 LoginContext 里关于这个标识符的信息。当堆积这个登录模块和其他模块时可以使用这个选项。
hashAlgorithm
代表密码的哈希算法的字符串。
none
用于 hash 密码的 java.security.MessageDigest 算法的名称。这个选项没有默认值,你必须显性地设置它来启用哈希算法。当指定了 hashAlgorithm 时,CallbackHandler 里包含的明文密码将在作为 inputPassword 参数传递给 UsernamePasswordLoginModule.validatePassword 前进行 hash。保存在 users.properties 文件里的密码必须进行同等的 hash。
hashEncoding
base64hex
base64
如果设置了 hashAlgorithm,哈希密码的字符串格式。
hashCharset
字符串
容器的运行时环境里的默认编码集。
将明文密码转换为字节队列的编码。
unauthenticatedIdentity
主体名称
定义分配给不包含验证信息的请求的 principal 名称。这允许不受保护的 servlet 调用不要求专有角色的 EJB 上的方法。这样的 principal 没有关联的角色且只访问未设置安全性的 EJB 或者和 unchecked permission 约束关联的 EJB。
自定义验证模块

验证模块是 javax.security.auth.spi.LoginModule 的实现。关于创建自定义验证模块的更多信息,请参考相关的 API 文档。