3.3. 使用 Elytron 进行身份切换

3.3.1. 在 Server-to-server Jakarta Enterprise Beans 调用中切换身份

默认情况下,当您对部署到应用服务器的 Jakarta Enterprise Beans 进行远程调用时,用于身份验证的身份与源服务器中使用的身份相同。在某些情况下,您可能想要在不同身份的安全上下文中运行远程安全 Jakarta Enterprise Beans。

您可以使用 Elytron API 将 server-to-server Jakarta Enterprise Beans 调用中的身份切换。当您这样做时,使用在 API 调用中编程指定的身份,通过连接接收的请求作为新请求执行。

以下代码示例演示了在远程 Jakarta Enterprise Beans 上切换用于身份验证的身份。securityDomain.authenticate() 方法传递的 remoteUsernameremotePassword 参数是用于目标服务器上进行身份验证的身份凭证。

示例:在 Server-to-server Jakarta Enterprise Beans 调用中切换身份

SecurityDomain securityDomain = SecurityDomain.getCurrent();
Callable<T> forwardIdentityCallable = () -> {
    return AuthenticationContext.empty()
            .with(MatchRule.ALL,
                    AuthenticationConfiguration.empty()
                    .setSaslMechanismSelector(SaslMechanismSelector.ALL)
                    .useForwardedIdentity(securityDomain))
            .runCallable(callable);
};

securityDomain.authenticate(remoteUsername, new PasswordGuessEvidence(remotePassword.toCharArray())).runAs(forwardIdentityCallable);