3.3. Elytron でのアイデンティティーの切り替え

3.3.1. サーバー間の Jakarta Enterprise Beans コールでのアイデンティティの切り替え

デフォルトでは、アプリケーションサーバーにデプロイされた Jakarta Enterprise Beans にリモート呼び出しを行う場合、リモートサーバーの認証に使用されるアイデンティティーはソースサーバーで使用されていたものと同じになります。場合によっては、異なるアイデンティティーのセキュリティーコンテキスト内でリモートセキュアな Jakarta Enterprise Beans を実行することがあります。

Elytron API を使用して、サーバー間の Jakarta Enterprise Beans 呼び出しのアイデンティティーを切り換えることができます。これを実行すると、API 呼び出しでプログラムに従って指定されたアイデンティティーを使用して、接続上で受信されるリクエストは新しいリクエストとして実行されます。

以下のコード例は、リモート Jakarta Enterprise Beans の認証に使用されるアイデンティティーを切り替える方法を示しています。securityDomain.authenticate() メソッドで渡される remoteUsername および remotePassword 引数は、ターゲットサーバーで認証に使用されるアイデンティティーのクレデンシャルです。

例: サーバー間の 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);