2.2.2. 使用授权转发模式
除了凭证转发外,Elytron 还支持在对等点之间信任地使用身份。这在以下情况下非常有用:
- 要求是您无法通过线路发送密码。
- 身份验证类型是不支持凭证转发的验证类型。
- 环境需要限制哪些系统被允许接收传播的请求。
要使用授权转发,您首先在转发服务器上配置身份验证客户端 ,然后将接收服务器配置为接受和处理授权。
在转发服务器上配置身份验证客户端
要启用授权转发,您必须在转发服务器配置中配置身份验证客户端配置。
以下管理 CLI 命令创建默认身份验证客户端配置来启用身份验证转发。如果需要,您可以配置基于高级规则的选择。
示例:管理 CLI 命令以创建身份验证客户端配置
/subsystem=elytron/authentication-configuration=forwardit:add(authentication-name=theserver1,security-domain=ApplicationDomain,realm=ApplicationRealm,forwarding-mode=authorization,credential-reference={clear-text=thereallysecretpassword})
/subsystem=elytron/authentication-context=forwardctx:add(match-rules=[{authentication-configuration=forwardit,match-no-user=true}])
这些命令将下列 身份验证配置 和身份验证 上下文 配置添加到 elytron 子系统:
示例:身份验证客户端配置
<authentication-client>
<authentication-configuration name="forwardit" authentication-name="theserver1" security-domain="ApplicationDomain" forwarding-mode="authorization" realm="ApplicationRealm">
<credential-reference clear-text="thereallysecretpassword"/>
</authentication-configuration>
<authentication-context name="forwardctx">
<match-rule match-no-user="true" authentication-configuration="forwardit"/>
</authentication-context>
</authentication-client>
当转发服务器联系接收服务器时,它不使用默认的基于身份验证的用户名和凭据,而是使用预定义的服务器登录名称 theserver1 来建立信任关系。
在接收服务器上配置授权转发
要成功完成转发,接收服务器配置需要配置与转发服务器传递的身份匹配的身份。在这种情况下,您必须使用正确的凭据在接收服务器上配置名为 theserver1 的用户。
您还必须在 elytron 子系统中配置"RunAs"权限映射,以允许从转发服务器传递的 server1 身份的身份切换。如需有关权限映射的更多信息,请参阅如何为 JBoss EAP 配置服务器安全性 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/how_to_configure_server_security/#create_an_elytron_permission_mapper 创建 Elytron Permission Mapper。
下面的命令添加了一个名为 auth ,其中包含以下配置:
-forwarding-permission-mapper 的 simple -permission-mapper
-
用户
匿名的权限映射。此用户没有权限,这会阻止匿名用户登录。 -
用户 user
server1的权限映射。此用户被分配了RunAsPrincipalPermission权限*,它授予该用户作为任何身份运行的全局权限。您可以根据偏好将权限限制为特定身份。 - 所有其他用户的权限映射。
示例:管理CLI命令到创建简单权限映射器
/subsystem=elytron/permission-set=run-as-principal-permission:add(permissions=[{class-name="org.wildfly.security.auth.permission.RunAsPrincipalPermission",target-name="*"}])
/subsystem=elytron/simple-permission-mapper=auth-forwarding-permission-mapper:add(permission-mappings=[{principals=["anonymous"]},{principals=["theserver1"],permission-sets=[{permission-set=login-permission},{permission-set=default-permissions},{permission-set=run-as-principal-permission}]},{match-all=true,permission-sets=[{permission-set=login-permission},{permission-set=default-permissions}]}]
此命令向 elytron 子系统添加下列 简单权限映射 器配置:
示例:简单权限映射器配置
<mappers>
<simple-permission-mapper name="auth-forwarding-permission-mapper">
<permission-mapping>
<principal name="anonymous"/>
<!-- No permissions: Deny any permission to anonymous! -->
</permission-mapping>
<permission-mapping>
<principal name="theserver1"/>
<permission-set name="login-permission"/>
<permission-set name="default-permissions"/>
<permission-set name="run-as-principal-permission"/>
</permission-mapping>
<permission-mapping match-all="true">
<permission-set name="login-permission"/>
<permission-set name="default-permissions"/>
</permission-mapping>
</simple-permission-mapper>
</mappers>
<permission-sets>
<permission-set name="login-permission">
<permission class-name="org.wildfly.security.auth.permission.LoginPermission"/>
</permission-set>
<permission-set name="default-permissions">
<permission class-name="org.wildfly.extension.batch.jberet.deployment.BatchPermission" module="org.wildfly.extension.batch.jberet" target-name="*"/>
<permission class-name="org.wildfly.transaction.client.RemoteTransactionPermission" module="org.wildfly.transaction.client"/>
<permission class-name="org.jboss.ejb.client.RemoteEJBPermission" module="org.jboss.ejb-client"/>
</permission-set>
<permission-set name="run-as-principal-permission">
<permission class-name="org.wildfly.security.auth.permission.RunAsPrincipalPermission" target-name="*"/>
</permission-set>
</permission-sets>
login-permission 和 default-permissions 权限集已存在于默认配置中。
如果在转发授权后使用主体转换器,则这些转换器会同时应用于身份验证和授权主体。