Elytron を使用して Web アプリケーションをセキュアにする場合、elytron サブシステムを使用して登
録できるカスタム HTTP 認証メカニズムを実装することが可能です。また、このメカニズムを利用する ために、デプロイメントの変更を必要とせずにデプロイメント内の設定をオーバーライドすることも可 能です。
重要 重要
import io.undertow.server.HandlerWrapper;
import io.undertow.server.HttpHandler;
import io.undertow.server.handlers.builder.HandlerBuilder;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
public class MyHandlerBuilder implements HandlerBuilder { public String name() {
return "myHttpHandler";
}
public Map<String, Class<?>> parameters() {
return Collections.<String, Class<?>>singletonMap("myParam", String.class);
}
public Set<String> requiredParameters() { return Collections.emptySet();
}
public String defaultParameter() { return null;
}
public HandlerWrapper build(final Map<String, Object> config) { return new HandlerWrapper() {
public HttpHandler wrap(HttpHandler handler) {
MyHttpHandler result = new MyHttpHandler(handler);
result.setMyParam((String) config.get("myParam"));
return result;
} };
} }
重要 重要
すべてのカスタム HTTP メカニズムは、HttpServerAuthenticationMechanism イン ターフェースを実装する必要があります。
通常、HTTP メカニズムでは、HTTPServerRequest オブジェクトを渡すリクエストの処理に
evaluateRequest メソッドが呼び出されます。このメカニズムがリクエストを処理し、リクエスト上で
以下のコールバックメソッドの 1 つを使用して、結果を示します。
authenticationComplete - メカニズムによってリクエストが正常に認証されたことを示しま す。
authenticationFailed - 認証は実行され、失敗したことを示します。
authenticationInProgress - 認証は開始され、追加のラウンドトリップが必要であることを示 します。
badRequest - このメカニズムの認証によってリクエストの検証に失敗したことを示します。
noAuthenticationInProgress - メカニズムが認証を何も実行しなかったことを示します。
HttpServerAuthenticationMechanism インターフェースを実行するカスタム HTTP メカニズムを作成 したら、次にこのメカニズムのインスタンスを返すファクトリーを作成します。このファクトリー は、HttpAuthenticationFactory インターフェースを実装する必要があります。ファクトリーの実装で 最も重要なのは、要求されたメカニズムの名前を二重チェックすることです。必要なメカニズムを作成 できない場合は、ファクトリーが null を返すことが重要になります。メカニズムファクトリーは、要求 されたメカニズムの作成が可能であるかどうかを決定するために、渡されたマップのプロパティーも考 慮することができます。
メカニズムファクトリーが利用可能であるかどうかをアドバタイズするのに使用できる方法は 2 つあり ます。
1 つ目は、サポートする各メカニズムに対して 1 度、利用可能なサービスとして登録された HttpAuthenticationFactory を用いて java.security.Provider を実装する方法です。
2 つ目は、java.util.ServiceLoader を使用して代わりにファクトリーを検出する方法です。こ れを行うには、org.wildfly.security.http.HttpServerAuthenticationMechanismFactory とい う名前のファイルを META-INF/services 以下に追加する必要があります。このファイルの内容 には、ファクトリー実装の完全修飾クラス名のみが必要になります。
メカニズムは使用する準備が整ったモジュールとしてアプリケーションサーバーにインストールできま す。
module add --name=org.wildfly.security.examples.custom-http --resources=/path/to/custom-http-mechanism.jar --dependencies=org.wildfly.security.elytron,javax.api
カスタム
カスタム
HTTPメカニズムの使用 メカニズムの使用
1. カスタムモジュールを追加します。/subsystem=elytron/service-loader-http-server-mechanism-factory=custom-factory:add(module=org.wildfly.security.examples.custom-http)
2. http-authentication-factory を追加して、メカニズムファクトリーを認証に使用される security-domain と結び付けます。
/subsystem=elytron/http-authentication-factory=custom-mechanism:add(http-server- mechanism-factory=custom-factory,security-domain=ApplicationDomain,mechanism-configurations=[{mechanism-name=custom-mechanism}])
3. application-security-domain リソースを更新し、新しい http-authentication-factory を使用 するようにします。
注記 注記
アプリケーションがデプロイされると、デフォルトで other セキュリティードメ インを使用します。そのため、アプリケーションへのマッピングを追加して、
Elytron HTTP 認証ファクトリーにマップする必要があります。
/subsystem=undertow/application-security-domain=other:add(http-authentication-factory=application-http-authentication)
application-security-domain リソースを更新して、新しい http-authentication-factory を使 用できるようになりました。
/subsystem=undertow/application-security-domain=other:write-attribute(name=http-authentication-factory,value=custom-mechanism)
/subsystem=undertow/application-security-domain=other:write-attribute(name=override-deployment-config,value=true)
上記のコマンドラインはデプロイメントの設定をオーバーライドすることに注意してくださ い。そのため、デプロイメントが別のメカニズムを使用するよう設定されていても http-authentication-factory からのメカニズムが使用されます。よって、デプロイメント自体の変 更を必要としなくても、デプロイメント内で設定をオーバーライドしてカスタムメカニズムを 利用することが可能です。
4. サーバーをリロードします。
reload