Oracle® Fusion Middleware Oracle WebLogic Serverセキュリティ・プロバイダの開発 11g リリース1(10.3.4) B61623-02 |
|
![]() 前 |
![]() 次 |
認証プロバイダは、プリンシパル検証プロバイダを利用して、サブジェクトに格納されるプリンシパル(ユーザーとグループ)に署名し、信頼性を検証します。こうした検証によって、信頼度は向上し、悪意のあるプリンシパルによる改ざんの可能性を低くすることができます。サブジェクトのプリンシパルの検証は、WebLogic Serverで各呼出しのRMIクライアント・リクエストがデマーシャリングされる際に行われます。サブジェクトのプリンシパルの信頼性も、認可判定の際に検証されます。
以下の節では、プリンシパル検証プロバイダの概念と機能、およびカスタム・プリンシパル検証プロバイダの開発手順について説明します。
プリンシパル検証プロバイダを開発する前に、以下の概念を理解しておく必要があります。
IDアサーション・プロバイダが特定のタイプのトークンをサポートするように、プリンシパル検証プロバイダも特定のタイプのプリンシパルをサポートします。たとえば、WebLogicプリンシパル検証プロバイダ(「カスタム・プリンシパル検証プロバイダを開発する必要があるか」を参照)はWebLogic Serverプリンシパルの署名と信頼性の検証を行います。
構成済みの認証プロバイダに関連付けられているプリンシパル検証プロバイダ(「プリンシパル検証プロバイダと他のタイプのセキュリティ・プロバイダの違い」を参照)は、サブジェクトに格納されていてそのプリンシパル検証プロバイダがサポートするタイプの全プリンシパルに対して署名と検証を行います。
プリンシパル検証プロバイダは、主に認証プロバイダの「ヘルパー」として機能する特殊なセキュリティ・プロバイダです。プリンシパル検証プロバイダの主要な機能は、サブジェクトに格納されたプリンシパルが悪意のある個人によって改ざんされるのを防止することです。
AuthenticationProvider
SSPI (「AuthenticationProviderV2 SSPIの実装」を参照)には、getPrincipalValidator
というメソッドが含まれています。このメソッドでは、認証プロバイダと共に使用するプリンシパル検証プロバイダの実行時クラスを指定します。プリンシパル検証プロバイダの実行時クラスとしては、Oracle提供のもの(WebLogicプリンシパル検証プロバイダ)か、独自に開発したもの(カスタム・プリンシパル検証プロバイダ)を使用できます。認証プロバイダのgetPrincipalValidator
メソッドでWebLogicプリンシパル検証プロバイダを使用する例については、「例4-0 、「ユーザー、グループ、プリンシパル、およびサブジェクト間の関係」」を参照してください。
WebLogic Server管理コンソールを使用して認証プロバイダのMBeanタイプを生成し、認証プロバイダを構成するので、プリンシパル検証プロバイダでそれらの手順を行う必要はありません。
認証(または認可)処理を行うときに、WebLogic Securityフレームワークはサブジェクトのプリンシパルを調べてそれが有効かどうかを確認します。プリンシパルが無効の場合、WebLogic Securityフレームワークはサブジェクトが無効であることを示すテキストを付けてセキュリティ例外を送出します。サブジェクトが無効になる原因には以下のものがあります。
サブジェクトのプリンシパルに対応するプリンシパル検証プロバイダが構成されていません(つまりWebLogic Securityフレームワークでそのサブジェクトを検証する手段がありません)
注意: サブジェクトには複数のプリンシパルを格納できるため(それぞれ異なる認証プロバイダのLoginModuleによって格納される)、プリンシパルは複数の異なるプリンシパル検証プロバイダを持つことができます。 |
このセキュリティ・ドメインとは異なる資格証明を使用する別のWebLogic Serverセキュリティ・ドメインで署名されたプリンシパルがあり、呼出し側がそれを現在のドメインで使用しようとしている
セキュリティを低下させる目的で作成された無効な署名を持つプリンシパルがある
プリンシパルが署名されていないサブジェクトがある
図6-1に示すとおり、ユーザーはユーザー名とパスワードの組合せを使ってシステムにログインしようとします。WebLogic Serverは、構成済みの認証プロバイダのLoginModuleを呼び出すことによって信頼を確立します。LoginModuleは、ユーザーのユーザー名とパスワードを検証し、JAAS (Java Authentication and Authorization Service)の要件に従って、プリンシパルが格納されたサブジェクトを返します。
WebLogic Serverは、指定されたプリンシパル検証プロバイダにサブジェクトを渡します。プリンシパル検証プロバイダは、そのプリンシパルに署名して、それらをWebLogic Serverを通じてクライアント・アプリケーションに返します。他のセキュリティ操作のためにサブジェクト内のプリンシパルが必要になった場合、同じプリンシパル検証プロバイダが、そのプリンシパルが署名時から変更されていないかどうかを検証します。
WebLogic Serverのデフォルト(アクティブ)セキュリティ・レルムには、WebLogicプリンシパル検証プロバイダが含まれます。IDアサーション・プロバイダが特定のタイプのトークンをサポートするのと同じように、プリンシパル検証プロバイダは特定のタイプのプリンシパルに対する署名と信頼性の確認を行います。WebLogicプリンシパル検証プロバイダは、WebLogic Serverプリンシパルの署名と検証を行います。言い換えると、WebLogic ServerユーザーまたはWebLogic Serverグループを表すプリンシパルに対して署名と検証を行います。
注意: WLSPrincipals クラス(weblogic.security パッケージ内)を使用すると、プリンシパル(ユーザーまたはグループ)がWebLogic Serverにとって特別な意味を持つものかどうかを判断できます(つまり、あらかじめ定義されたWebLogic ServerユーザーやWebLogic Serverグループかどうかを判断できます)。さらに、WebLogic Serverユーザーまたはグループを表すプリンシパルは、weblogic.security.spi パッケージのWLSUser インタフェースとWLSGroup インタフェースを実装する必要があります。
認証プロバイダは、 |
WebLogicプリンシパル検証プロバイダには、WLSUserImpl
およびWLSGroupImpl
という名前のWLSUser
インタフェースおよびWLSGroup
インタフェースの実装が含まれています。これらは、weblogic.security.principal
パッケージに定義されています。また、PrincipalValidatorImpl
という名前のPrincipalValidator
SSPIの実装も含まれています。これはweblogic.security.provider
パッケージに定義されています。PrincipalValidatorImpl
クラスのsign()
メソッドは、ランダム・シードを生成し、そのランダム・シードに基づいてダイジェストを計算します。(PrincipalValidator
SSPIの詳細は、「PrincipalValidator SSPIの実装」を参照してください。)
名前が付いているだけの単純なユーザーおよびグループ・プリンシパルがある状態で、WebLogicプリンシパル検証プロバイダを使用する場合には、以下の方法があります。
weblogic.security.principal.WLSUserImpl
クラスとweblogic.security.principal.WLSGroupImpl
クラスを使用します。
weblogic.security.provider.PrincipalValidatorImpl
クラスを使用します。
名前の他に追加のデータ・メンバーがあるユーザーおよびグループ・プリンシパルがある状態で、WebLogicプリンシパル検証プロバイダを使用する場合には、以下の方法があります。
独自のUserImpl
クラスとGroupImpl
クラスを記述します。
weblogic.security.principal.WLSAbstractPrincipal
クラスを拡張します。
weblogic.security.spi.WLSUser
インタフェースとweblogic.security.spi.WLSGroup
インタフェースを実装します。
equals()
メソッドを実装して、追加のデータ・メンバーを含めます。実装では、WLSAbstractPrincipal
が残りのデータを検証できるように、完了時にsuper.equals()
メソッドを呼び出す必要があります。
注意: デフォルトでは、ユーザー名とグループ名だけが検証されます。追加のデータ・メンバーも検証する場合は、続いてgetSignedData() メソッドを実装します。 |
weblogic.security.provider.PrincipalValidatorImpl
クラスを使用します。
独自の検証スキームがあり、WebLogicプリンシパル検証プロバイダを使用しない場合や、WebLogic Serverプリンシパル以外のプリンシパルを検証する場合は、カスタム・プリンシパル検証プロバイダを開発する必要があります。
カスタム・プリンシパル検証プロバイダを開発するには、以下の方法があります。
以下の実装を行うことによって、独自のUserImpl
クラスとGroupImpl
クラスを記述します。
weblogic.security.spi.WLSUserインタフェースとweblogic.security.spi.WLSGroupインタフェースを実装します。
java.io.Serializableインタフェースを実装します。
weblogic.security.spi.PrincipalValidator
SSPIを実装することによって、独自のPrincipalValidationImpl
クラスを記述します(「PrincipalValidator SSPIの実装」を参照)。
PrincipalValidator
SSPIを実装するには、以下のメソッドの実装を提供する必要があります。
validate
public boolean validate(Principal principal) throws SecurityException;
validate
メソッドは1つのプリンシパルを1つの引数として取り、その有効性を検証しようとします。すなわち、このメソッドは、そのプリンシパルが署名されてから変更されていないかどうかを確認します。
sign
public boolean sign(Principal principal);
sign
メソッドは1つのプリンシパルを1つの引数として取り、それに署名して信頼を保証します。これにより、validate
メソッドを使って、後でそのプリンシパルを検証できるようになります。
sign
メソッドの実装は、悪意のある個人が容易に再現することのできない機密アルゴリズムでなければなりません。そのアルゴリズムをsign
メソッド自体に組み込むか、sign
メソッドがプリンシパルの署名に使用するトークンをサーバーに要求するようにするか、またはプリンシパルに署名する他の手段を実装できます。
getPrincipalBaseClass
public Class getPrincipalBaseClass();
getPrincipalBaseClass
メソッドは、このプリンシパル検証プロバイダが検証と署名の方法を認識しているプリンシパルのベース・クラスを返します。
PrincipalValidator
SSPIと上記のメソッドの詳細は、WebLogic Server APIリファレンスJavadocを参照してください。