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