2.4. 使用基于 LDAP 的身份存储配置身份验证
确定用户名、密码和角色的 LDAP 格式:
要使用 LDAP 服务器设置身份存储身份验证,您需要确定用户名、密码和角色的存储方式。在本例中,我们使用以下结构:
dn: dc=wildfly,dc=org dc: wildfly objectClass: top objectClass: domain dn: ou=Users,dc=wildfly,dc=org objectClass: organizationalUnit objectClass: top ou: Users dn: uid=jsmith,ou=Users,dc=wildfly,dc=org objectClass: top objectClass: person objectClass: inetOrgPerson cn: John Smith sn: smith uid: jsmith userPassword: password123 dn: ou=Roles,dc=wildfly,dc=org objectclass: top objectclass: organizationalUnit ou: Roles dn: cn=Admin,ou=Roles,dc=wildfly,dc=org objectClass: top objectClass: groupOfNames cn: Admin member: uid=jsmith,ou=Users,dc=wildfly,dc=org
配置 a
dir-context
:若要从 JBoss EAP 连接到 LDAP 服务器,您需要配置一个
dir-context
,它提供 URL 以及用于连接服务器的主体。/subsystem=elytron/dir-context=exampleDC:add(url="ldap://127.0.0.1:10389",principal="uid=admin,ou=system",credential-reference={clear-text="secret"})
注意无法使用 JMX
ObjectName 来
解密 LDAP 凭据。相反,可以通过如何使用凭据存储来保护凭据 ,如如何为 JBoss EAP 配置服务器安全性中所述。在 JBoss EAP
中配置 ldap-realm
:/subsystem=elytron/ldap-realm=exampleLR:add(dir-context=exampleDC,identity-mapping={search-base-dn="ou=Users,dc=wildfly,dc=org",rdn-identifier="uid",user-password-mapper={from="userPassword"},attribute-mapping=[{filter-base-dn="ou=Roles,dc=wildfly,dc=org",filter="(&(objectClass=groupOfNames)(member={0}))",from="cn",to="Roles"}]})
警告如果引用的 LDAP 服务器包含循环引用,则可能会导致 JBoss EAP
服务器上的 java.lang.OutOfMemoryError
错误。添加
simple-role-decoder
:/subsystem=elytron/simple-role-decoder=from-roles-attribute:add(attribute=Roles)
配置
security-domain
:/subsystem=elytron/security-domain=exampleLdapSD:add(realms=[{realm=exampleLR,role-decoder=from-roles-attribute}],default-realm=exampleLR,permission-mapper=default-permission-mapper)
在
undertow
子系统中配置application-security-domain
:/subsystem=undertow/application-security-domain=exampleApplicationDomain:add(security-domain=exampleLdapSD)
注意可以通过导航到 Configuration
Subsystems Web(Under tow
)→ Application Security Domain,使用管理控制台配置 undertow 子系统中的application-security-domain
。配置应用程序的
web.xml
和jboss-web.xml
:您的
web.xml
和jboss-web.xml
必须更新为使用您在 JBoss EAP 中配置的application-security-domain
。例如,将 Web 应用程序配置为使用 Elytron 或传统安全性进行身份验证。
如果 elytron
子系统使用 LDAP 服务器来执行身份验证,JBoss EAP 将返回 500 或内部服务器错误 ,
如果该 LDAP 服务器无法访问,则返回错误代码。此行为与使用传统 security
子系统的旧版 JBoss EAP 不同,后者在相同的条件下返回 401
或未授权的错误代码。