2.2. 使用 Elytron 传播和转发身份
2.2.1. 为远程调用传播安全标识符 复制链接链接已复制到粘贴板!
JBoss EAP 7.1 引入了轻松配置服务器和应用,从而将安全身份从客户端传播到服务器以进行远程调用。您还可以将服务器组件配置为在给定用户的安全身份中运行。
本节中的示例演示了如何转发安全身份凭据。它将客户端和 EJB 的安全身份传播到远程 EJB。它返回一个字符串,其中包含名为远程 EJB 的 Principal
的名称,以及用户的授权角色信息。该示例由以下组件组成:
- 个安全的 EJB,它包含一个可由所有用户访问的方法,它将返回有关调用者的授权信息。
- 包含单一方法的中间 EJB。它利用远程连接,并在受保护的 EJB 上调用方法。
- 调用中间 EJB 的远程独立客户端应用。
-
META-INF/wildfly-config.xml
文件,其中包含用于身份验证的身份信息。
您必须首先通过配置服务器来启用安全身份传播。接下来 查看使用 WildFlyInitialContextFactory
查找和调用远程 EJB 的示例应用代码。
配置服务器以进行安全传播
配置
ejb3
子系统,以使用 ElytronApplicationDomain
。/subsystem=ejb3/application-security-domain=quickstart-domain:add(security-domain=ApplicationDomain)
/subsystem=ejb3/application-security-domain=quickstart-domain:add(security-domain=ApplicationDomain)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会将以下
application-security-domain
配置添加到ejb3
子系统:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加
PLAIN
身份验证配置,以发送纯文本用户名和密码,以及用于出站连接的身份验证上下文。有关支持身份传播的机制列表,请参阅支持安全身份传播的机制。/subsystem=elytron/authentication-configuration=ejb-outbound-configuration:add(security-domain=ApplicationDomain,sasl-mechanism-selector="PLAIN") /subsystem=elytron/authentication-context=ejb-outbound-context:add(match-rules=[{authentication-configuration=ejb-outbound-configuration}])
/subsystem=elytron/authentication-configuration=ejb-outbound-configuration:add(security-domain=ApplicationDomain,sasl-mechanism-selector="PLAIN") /subsystem=elytron/authentication-context=ejb-outbound-context:add(match-rules=[{authentication-configuration=ejb-outbound-configuration}])
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会将下列
authentication-client
配置添加到elytron
子系统:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将远程目的地出站套接字绑定到
standard-sockets
套接字绑定。/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=ejb-outbound:add(host=localhost,port=8080)
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=ejb-outbound:add(host=localhost,port=8080)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会将以下
ejb-outbound
出站套接字绑定添加到standard-sockets
套接字绑定组中。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加远程出站连接,并在 HTTP 连接器中设置 SASL 身份验证工厂。
/subsystem=remoting/remote-outbound-connection=ejb-outbound-connection:add(outbound-socket-binding-ref=ejb-outbound, authentication-context=ejb-outbound-context) /subsystem=remoting/http-connector=http-remoting-connector:write-attribute(name=sasl-authentication-factory,value=application-sasl-authentication)
/subsystem=remoting/remote-outbound-connection=ejb-outbound-connection:add(outbound-socket-binding-ref=ejb-outbound, authentication-context=ejb-outbound-context) /subsystem=remoting/http-connector=http-remoting-connector:write-attribute(name=sasl-authentication-factory,value=application-sasl-authentication)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会将以下
http-remoting-connector
和ejb-outbound-connection
配置添加到远程子系统:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 Elytron SASL 身份验证配置为使用
PLAIN
机制。/subsystem=elytron/sasl-authentication-factory=application-sasl-authentication:write-attribute(name=mechanism-configurations,value=[{mechanism-name=PLAIN},{mechanism-name=JBOSS-LOCAL-USER,realm-mapper=local},{mechanism-name=DIGEST-MD5,mechanism-realm-configurations=[{realm-name=ApplicationRealm}]}])
/subsystem=elytron/sasl-authentication-factory=application-sasl-authentication:write-attribute(name=mechanism-configurations,value=[{mechanism-name=PLAIN},{mechanism-name=JBOSS-LOCAL-USER,realm-mapper=local},{mechanism-name=DIGEST-MD5,mechanism-realm-configurations=[{realm-name=ApplicationRealm}]}])
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会将以下
application-sasl-authentication
配置添加到elytron
子系统:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
服务器现在已配置为为以下示例应用启用安全传播:
查看传播安全身份的应用程序代码示例
在服务器配置中启用了安全身份传播后,EJB 客户端应用可以使用 WildFlyInitialContextFactory
来查找并调用 EJB 代理。EJB 将作为在客户端示例中验证的用户身份调用,如下所示:以下缩写的代码示例取自 JBoss EAP 7.3 附带的 ejb-security-context-propagation
快速入门:有关安全身份传播的完整工作示例,请参见 Quickstart。
若要以其他用户身份调用 EJB,您可以在上下文属性中设置 Context.SECURITY_PRINCIPAL
和 Context.SECURITY_CREDENTIALS
。
示例:远程客户端
示例:中间 EJB
示例:Secured EJB
示例:wildfly-config.xml 文件