10.4. カスタム HTTP メカニズムの開発
Elytron を使用して Web アプリケーションをセキュアにする場合、elytron サブシステムを使用して登録できるカスタム HTTP 認証メカニズムを実装することが可能です。また、このメカニズムを利用するために、デプロイメントの変更を必要とせずにデプロイメント内の設定をオーバーライドすることも可能です。
すべてのカスタム 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 メカニズムの使用
カスタムモジュールを追加します。
/subsystem=elytron/service-loader-http-server-mechanism-factory=custom-factory:add(module=org.wildfly.security.examples.custom-http)
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}])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からのメカニズムが使用されます。よって、デプロイメント自体の変更を必要としなくても、デプロイメント内で設定をオーバーライドしてカスタムメカニズムを利用することが可能です。サーバーをリロードします。
reload