WebLogic セキュリティ プロバイダの開発
![]() |
![]() |
![]() |
![]() |
サーブレット認証フィルタは、ID アサーションなどの認証機能のための前処理および後処理を実行するプロバイダです。サーブレット検証フィルタは、主に認証プロバイダの「ヘルパー」として機能する特殊なセキュリティ プロバイダです。
ServletAuthenticationFilter
インタフェースは、WebLogic Server にプラグインできる認証フィルタに対してセキュリティ サービス プロバイダ インタフェース (SSPI) を定義します。認証プロセスでサーブレット コンテナに呼び出させる認証フィルタが認証プロバイダにあることを通知するために、ServletAuthenticationFilter
インタフェースを認証プロバイダの一部として実装します。通常、このインタフェースは認証プロバイダの ID アサーション形式の一部として実装されます。
以下の節では、サーブレット認証フィルタ インタフェースの概念と機能、およびサーブレット認証フィルタの開発手順について説明します。
Java サーブレット API 2.3 仕様で定義されているように、フィルタは、要求がサーブレットに届く前のプリプロセッサ、またはサーブレットから離れた応答のポストプロセッサです。サーブレット認証フィルタを使用すると、再利用可能なユニットで反復タスクをカプセル化し、サーブレットまたは JSP ページからの応答を変換できます。
サーブレット認証フィルタは、コンテナベースの認証をフィルタが置換または拡張できるようにするフィルタ オブジェクトの拡張機能です。
WebLogic Security フレームワークを使用すると、カスタム認証プロバイダを利用できます。ただし、Java サーブレット API 2.3 の仕様により、認証プロセス時は、認証プロバイダとクライアントまたは他のサーバとの間の対話は制限されます。これにより、認証メカニズムは、サーブレット コンテナが提供する認証メカニズムと互換性のある基本、フォーム、証明書の形式に制限されます。
フィルタには、アーキテクチャ依存の制限はほとんどありません。つまり、サーブレット認証フィルタは、サーブレット コンテナが提供する認証メカニズムに依存していません。認証プロセスを開始するコンテナの前にフィルタを呼び出せるようにすれば、セキュリティ レルムは、より柔軟な認証メカニズムを実装できます。たとえば、サーブレット認証フィルタを使用すると、認証用の SAML プロバイダ サイトにユーザをリダイレクトできます。
WebLogic 認証プロバイダ内の JAAS LoginModule は、ログイン プロセスのカスタマイズに使用できます。ユーザ データベースの場所のカスタマイズ、ログインの実行に必要な証明データの種類、サブジェクトへのグループの指定は、LoginModule を介して実装されます。
一方、ログインを実行するためのリモート サイトへのリダイレクト、クエリ文字列からのログイン情報の抽出、ブラウザとのログイン機能のネゴシエーションは、サーブレット認証フィルタを介して実装されます。
サーブレット認証フィルタを設計する際には、以下の事項を考慮する必要があります。
サーブレット認証フィルタ インタフェースを使用すると、認証プロバイダは 0 個以上のサーブレット認証フィルタ クラスを実装できます。フィルタは以下の手順で呼び出されます。
サーブレット コンテナが、サーブレット認証フィルタのコンフィグレーション済みチェーンを WebLogic Security フレームワークから取得します。
WebLogic Security フレームワークは、認証プロバイダの順序に従ってサーブレット認証フィルタを返します。1 つのプロバイダに複数のサーブレット認証フィルタがある場合、WebLogic Security フレームワークは、ServletAuthenticationFilter の getAuthenticationFilters
メソッドで返された javax.servlet.Filter の順序付けされたリストを使用します。
doFilter
メソッドを呼び出します。サーブレット認証フィルタ インタフェースを認証プロバイダの一部として実装しても、認証プロバイダは、サーブレット認証フィルタを直接呼び出すわけではありません。サーブレット認証フィルタの実装は、フィルタを配置して呼び出す方法を認識する WebLogic Security フレームワークの特定の機能に依存します。
カスタム サーブレット認証フィルタを開発する場合は、カスタム認証プロバイダが WLS 固有のクラス (weblogic.servlet.* など) および J2EE 固有のクラス (javax.servlet.* など) を呼び出さないようにしてください。このルールに従うと、WebLogic Enterprise Security のポータビリティが最大限に高められます。
図 12-1 にこの要件を示します。
図 12-1 認証プロバイダがサーブレット認証フィルタを呼び出さない
このリリースの WebLogic Server には、SPNEGO (Simple and Protected Negotiate) で必要なヘッダ操作を処理するサーブレット認証フィルタが含まれます。「ネゴシエート サーブレット認証フィルタ」と呼ばれるこのサーブレット認証フィルタは、WWW-Authenticate ヘッダおよび Authorization HTTP ヘッダをサポートするようにコンフィグレーションされています。
ネゴシエート サーブレット認証フィルタは、ネゴシエート プロトコルの認可されていない応答に対して適切な WWW-Authenticate ヘッダを生成し、以降の要求に対して Authorization ヘッダを処理します。このフィルタは、ネゴシエート ID アサーション プロバイダを介して使用できます。
デフォルトでは、ネゴシエート ID アサーション プロバイダは使用可能ですが、WebLogic デフォルト セキュリティ レルムにはコンフィグレーションされていません。ネゴシエート ID アサーション プロバイダは、WebLogic ID アサーション プロバイダの代わりとして使用したり、WebLogic ID アサーション プロバイダと併用したりできます。
カスタム サーブレット認証フィルタを開発するには、以下の手順に従います。
この情報を理解し、設計に関する判断を下したら、次の手順でサーブレット認証フィルタの実行時クラスを作成します。
カスタム サーブレット認証フィルタ プロバイダの実行時クラスの作成例については、「WebLogic MBeanMaker による MBean タイプの生成」を参照してください。
認証プロセスでサーブレット コンテナに呼び出させる認証フィルタが認証プロバイダにあることを通知するために、ServletAuthenticationFilter
インタフェースを認証プロバイダの一部として実装します。
サーブレット認証フィルタ SSPI を実装する際には、以下のメソッドの実装を提供する必要があります。
フィルタ インタフェース メソッドを実装するには、以下のメソッドの実装を提供する必要があります。通常は、init() を 1 回呼び出し、doFilter() を必要に応じた回数呼び出してから、destroy() を 1 回呼び出します。
destroy メソッドは、フィルタをサービスから取り除くよう指示するために Web コンテナによって呼び出されます。このメソッドは、フィルタの doFilter メソッド内のすべてのスレッドが終了した場合、またはタイムアウト期間が過ぎた場合にのみ一度だけ呼び出されます。Web コンテナは、このメソッドを呼び出した後に、フィルタのこのインスタンスに対して再び doFiletr メソッドを呼び出しません。
このメソッドを使用すると、フィルタは、保持されているリソース (メモリ、ファイル ハンドル、スレッドなど) をクリーンアップし、永続的なステートをメモリ内のフィルタの現在のステートと同期させることができます。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
チェーンの最後にあるリソースに対するクライアント要求があるため、要求/応答のペアがチェーン内を通るたびに、フィルタの doFilter
メソッドがコンテナによって呼び出されます。このメソッドに渡される FilterChain を使用すると、フィルタは、要求と応答をチェーン内の次のエンティティに渡すことができます。
4. FilterChain オブジェクトを使用してチェーン内の次のエンティティを呼び出すか (chain.doFilter())、フィルタ チェーン内の次のエンティティに要求/応答のペアを渡さずに要求の処理をブロックします。
「ID アサーション プロバイダ」で説明したとおり、チャレンジ ID アサーション インタフェースは、複数のチャレンジ、応答メッセージ、および状態を必要とするチャレンジ応答スキーマをサポートします。チャレンジ ID アサーション プロバイダ インタフェースを使用すると、ID アサーション プロバイダは、Microsoft の Windows NT チャレンジ/応答 (NTLM) や SPNEGO (Simple and Protected GSS-API Negotiation) などのチャレンジ/応答認証メカニズムを採用した認証プロトコルをサポートできます。
サーブレット認証フィルタを使用すると、サーブレット コンテナと互換性のある認証メカニズムに制限されることなくチャレンジ/応答プロトコルを実装できます。ただし、サーブレット認証フィルタは、WebLogic Security フレームワークで提供されている認証環境の外側で機能するので、WebLogic Security フレームワークを利用してプロバイダのコンテキストを判別することはできません。また、サーブレット認証フィルタでは、API でチャレンジ回数が複数の ID アサーション プロセスを駆動させる必要があります。
このリリースでは、weblogic.security.services.Authentication
クラスが拡張され、サーブレット認証フィルタからの複数のチャレンジ/応答 ID アサーションが可能になりました。新しいメソッドおよびインタフェースでは、ChallengeIdentityAsserterV2
SSPI インタフェースと ProviderChallengeContext
SSPI インタフェースに対してラッパーを利用できるので、サーブレット認証フィルタから呼び出すことができます。
これ以外に、WebLogic Security フレームワークのコンテキスト内でサーブレット認証フィルタから複数チャレンジ/応答ダイアログを実行する方法はドキュメント化されていません。サーブレット認証フィルタは、ChallengeIdentityAsserterV2
インタフェースおよび ProviderChallengeContext
インタフェースを直接呼び出すことはできません。
したがって、複数のチャレンジ/応答 ID アサーションをフィルタから実装する場合、ChallengeIdentityAsserterV2
インタフェースと ProviderChallengeContext
インタフェースを実装してから、weblogic.security.services.Authentication
メソッドと AppChallengeContext
インタフェースを使用してサーブレット認証フィルタからその 2 つのフィルタを呼び出す必要があります。
このプロセスを行う手順については、「ID アサーション プロバイダ」で説明しています。ここでは、概要を示します。
IdentityAsserterV2 SSPI を実装する「認証プロバイダ」の説明に従ってカスタム認証プロバイダの MBean タイプを生成する際には、使用しているサーブレット認証フィルタの MBean も実装する必要があります。
ServletAuthenticationFilter MBean は AuthenticationProvider MBean を拡張します。ServletAuthenticationFilter MBean はマーカー インタフェースなので、メソッドはありません。
<?xml version="1.0" ?>
<!DOCTYPE MBeanType SYSTEM "commo.dtd">
<MBeanType
Name = "ServletAuthenticationFilter"
Package = "weblogic.management.security.authentication"
Extends = "weblogic.management.security.authentication.AuthenticationProvider"
PersistPolicy = "OnUpdate"
Abstract = "true"
Description = "The SSPI MBean that all Servlet Authentication Filter providers must extend.
This MBean is just a marker interface.It has no methods on it."
>
</MBeanType>
WebLogic MBeanMaker を使用して MDF を実行して中間ファイルを生成し、MBean 実装ファイルを編集して適切なメソッドの実装を提供したら、サーブレット認証フィルタを含むカスタム認証プロバイダの MBean ファイルと実行時クラスを MBean JAR ファイル (MJF) にパッケージ化する必要があります。
カスタム認証プロバイダの場合、この手順は「WebLogic MBeanMaker を使用して MBean JAR ファイル (MJF) を作成する」で説明します。
サーブレット認証フィルタを実装するカスタム認証プロバイダをコンフィグレーションするということは、そのカスタム認証プロバイダをセキュリティ レルムに追加するということです。追加されたカスタム認証プロバイダには、認証サービスを必要とするアプリケーションからアクセスできます。
カスタム セキュリティ プロバイダのコンフィグレーションは管理タスクですが、カスタム セキュリティ プロバイダの開発者が行うこともできます。
WebLogic Server Administration Console を使用してカスタム認可プロバイダをコンフィグレーションする手順は、『WebLogic Server のセキュリティ』の「WebLogic セキュリティ プロバイダのコンフィグレーション」で説明されています。
![]() ![]() |
![]() |
![]() |