4.2.6. ElytronAuthenticator を使用したアイデンティティーの伝搬

警告

Java 8 の既知のクレデンシャル制限により、JBoss EAP での ElytronAuthenticator の使用はサポートされないか、または推奨されません。このクラスを使用してアイデンティティーを伝播する場合は、以下の制限に注意してください。

  • Java 8 設計の制限により、保護されたサーブレットへの呼び出しではセキュリティーアイデンティティーは伝播されません。
  • Jakarta Enterprise Beans などのサーバーで ElytronAuthenticator を使用しないでください。
  • 認証情報のキャッシュは、スタンドアロンクライアントの JVM で使用する場合に影響を与える可能性があります。

JBoss EAP 7.1 には ElytronAuthenticator クラスが導入されました.これは現在のセキュリティーコンテキストを使用して認証を実行します。org.wildfly.security.auth.util.ElytronAuthenticator クラスは java.net.Authenticator の実装です。

  • これには、新しいインスタンスを構成する ElytronAuthenticator() というコンストラクターがあります。
  • これには、PasswordAuthentication インスタンスを返す getPasswordAuthentication() メソッドがあります。

以下は、ElytronAuthenticator クラスを作成して使用し、アイデンティティーをサーバーに伝播するクライアントコードの例です。

例: ElytronAuthenticator を使用したコード

// Create the authentication configuration
AuthenticationConfiguration httpConfig = AuthenticationConfiguration.empty().useName("bob");

// Create the authentication context
AuthenticationContext context = AuthenticationContext.captureCurrent().with(MatchRule.ALL, httpConfig.usePassword(createPassword(httpConfig, "secret")));

String response = context.run((PrivilegedExceptionAction<String>) () -> {
    Authenticator.setDefault(new ElytronAuthenticator());
    HttpURLConnection connection = HttpURLConnection.class.cast(new URL("http://localhost:" + SERVER_PORT).openConnection());
    try (InputStream inputStream = connection.getInputStream()) {
        return new BufferedReader(new InputStreamReader(inputStream)).lines().findFirst().orElse(null);
    }
});