2.6. 使用多个身份服务配置身份验证和授权
如果您在不同身份存储之间存储身份属性,则请使用 aggregate-realm 将身份属性加载到单个安全域中以进行身份验证和授权。
2.6.1. 在 Elytron 中聚合 Realm 复制链接链接已复制到粘贴板!
通过 聚合域,您可以使用一个安全域进行身份验证,也可以使用另一个安全域聚合多个安全域,从而在 Elytron 中进行身份验证。例如,您可以将聚合域配置为使用属性域来进行身份验证,并使用 JDBC 域来进行身份验证。
在配置为聚合多个授权域的聚合域中,会创建一个身份,如下所示:
- 加载为授权配置的每个安全域的属性值。
- 如果在多个授权域中定义了属性,则使用属性第一次出现的值。
以下示例演示了如何在多个授权域包含相同身份属性的定义时创建身份。
示例
聚合 realm 配置:
authentication-realm=properties-realm,
authorization-realms=[jdbc-realm,ldap-realm]
从 JDBC 域获取的属性值:
e-mail: user@example.com groups: Supervisor, User从 ldap 域获取的属性值:
e-mail: administrator@example.com phone: 0000 0000 0000
从聚合域获取的身份:
e-mail: user@example.com
groups: Supervisor, User
phone: 0000 0000 0000
在示例中,两个授权域中都定义了 e-mail 属性。JDBC 域中定义的值用于生成的聚合域中的 电子邮件 属性,因为聚合域配置为聚合授权域,即 authorization-realms=[jdbc-realm,ldap-realm]。
2.6.2. 使用聚合域配置身份验证和授权 复制链接链接已复制到粘贴板!
要使用聚合域配置身份验证和授权,请创建一个聚合域,并配置安全域和应用安全域以使用聚合域。
先决条件
配置要聚合的安全域。
有关配置安全域的详情,请参考 如何配置身份管理 指南中的 Elytron subsystem。
配置要在安全域中使用的角色解码器。
有关角色解码器的详情,请参阅 如何配置服务器安全 指南中的创建 Elytron Role Decoder。
流程
创建聚合域:
使用一个授权域创建聚合域:
/subsystem=elytron/aggregate-realm=exampleAggregateRealm:add(authentication-realm=__SECURITY_REALM_FOR_AUTHENTICATION__, authorization-realm=__SECURITY_REALM_FOR_AUTHORIZATION__)创建具有多个授权域的聚合域:
/subsystem=elytron/aggregate-realm=exampleAggregateRealm:add(authentication-realm=__SECURITY_REALM_FOR_AUTHENTICATION__, authorization-realms=[__SECURITY_REALM_FOR_AUTHORIZATION_1__,__SECURITY_REALM_FOR_AUTHORIZATION_2__,...,__SECURITY_REALM_FOR_AUTHORIZATION_N__])
配置
security-domain:/subsystem=elytron/security-domain=exampleAggregateRealmSD:add(realms=[{realm=exampleAggregateRealm,role-decoder=__ROLE-DECODER__}],default-realm=exampleAggregateRealm,permission-mapper=default-permission-mapper)在
undertow子系统中配置application-security-domain:/subsystem=undertow/application-security-domain=exampleAggregareRealmApplicationDomain:add(security-domain=exampleAggregateRealmSD)配置应用程序的
web.xml和jboss-web.xml:您的
web.xml和jboss-web.xml必须更新为使用您在 JBoss EAP 中配置的application-security-domain。例如,将 Web 应用程序配置为使用 Elytron 或传统安全性进行身份验证。
2.6.3. Aggregate Realms 示例 复制链接链接已复制到粘贴板!
使用单个授权域聚合域示例
在本例中,s properties-realm 用于身份验证,aj dbc-realm 用于授权。
您必须预配置以下域:
-
properties-realmnamed examplPropertiesRealm -
jdbc-realmnamed exampleJdbcRealm
使用以下命令创建一个聚合域:
/subsystem=elytron/aggregate-realm:exampleSimpleAggregateRealm:add(authentication-realm=examplPropertiesRealm,authorization-realm=exampleJdbcRealm)
包含两个授权域的聚合域示例
在本例中,properties-realm 用于身份验证,并且 ldap-realm 和 jdbc-realm 的聚合用于授权。
您必须预配置以下域:
-
properties-realmnamed examplPropertiesRealm -
jdbc-realmnamed exampleJdbcRealm -
ldap-realmnamed exampleLdapRealm
使用以下命令创建一个聚合域:
/subsystem=elytron/aggregate-realm:exampleSimpleAggregateRealm:add(authentication-realm=examplPropertiesRealm,authorization-realms=[exampleJdbcRealm,exampleLdapRealm])