ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server セキュリティ プロバイダの開発
11g リリース 1 (10.3.1)
B55527-01
 

目次
目次

戻る
戻る
 
次へ
次へ

6 プリンシパル検証プロバイダ

認証プロバイダは、プリンシパル検証プロバイダを利用して、サブジェクトに格納されるプリンシパル (ユーザとグループ) に署名し、信頼性を検証します。こうした検証によって、信頼度は向上し、悪意のあるプリンシパルによる改ざんの可能性を低くすることができます。サブジェクトのプリンシパルの検証は、WebLogic Server で各呼び出しの RMI クライアント要求がデマーシャリングされる際に行われます。サブジェクトのプリンシパルの信頼性も、認可判定の際に検証されます。

以下の節では、プリンシパル検証プロバイダの概念と機能、およびカスタム プリンシパル検証プロバイダの開発手順について説明します。

プリンシパル検証の概念

プリンシパル検証プロバイダを開発する前に、以下の概念を理解しておく必要があります。

プリンシパル検証とプリンシパル タイプ

ID アサーション プロバイダが特定のタイプのトークンをサポートするように、プリンシパル検証プロバイダも特定のタイプのプリンシパルをサポートします。たとえば、WebLogic プリンシパル検証プロバイダ (「カスタム プリンシパル検証プロバイダを開発する必要があるか」を参照) は WebLogic Server プリンシパルの署名と信頼性の検証を行います。

コンフィグレーション済みの認証プロバイダに関連付けられているプリンシパル検証プロバイダ (「プリンシパル検証プロバイダと他のタイプのセキュリティ プロバイダの違い」を参照) は、サブジェクトに格納されていてそのプリンシパル検証プロバイダがサポートするタイプの全プリンシパルに対して署名と検証を行います。

プリンシパル検証プロバイダと他のタイプのセキュリティ プロバイダの違い

プリンシパル検証プロバイダは、主に認証プロバイダの「ヘルパー」として機能する特殊なセキュリティ プロバイダです。プリンシパル検証プロバイダの主要な機能は、サブジェクトに格納されたプリンシパルが悪意のある個人によって改ざんされるのを防止することです。

AuthenticationProvider SSPI (「AuthenticationProviderV2 SSPI の実装」を参照) には、getPrincipalValidator というメソッドが含まれています。このメソッドでは、認証プロバイダと共に使用するプリンシパル検証プロバイダの実行時クラスを指定します。プリンシパル検証プロバイダの実行時クラスとしては、Oracle 提供のもの (WebLogic プリンシパル検証プロバイダ) か、独自に開発したもの (カスタム プリンシパル検証プロバイダ) を使用できます。認証プロバイダの getPrincipalValidator メソッドで WebLogic プリンシパル検証プロバイダを使用する例については、「コード リスト 4-0、「ユーザ、グループ、プリンシパル、およびサブジェクト間の関係」」を参照してください。

WebLogic Server Administration Console を使用して認証プロバイダの MBean タイプを生成し、認証プロバイダをコンフィグレーションするので、プリンシパル検証プロバイダでそれらの手順を行う必要はありません。

無効なプリンシパルが原因のセキュリティ例外

認証 (または認可) 処理を行うときに、WebLogic Security フレームワークはサブジェクトのプリンシパルを調べてそれが有効かどうかを確認します。プリンシパルが無効の場合、WebLogic Security フレームワークはサブジェクトが無効であることを示すテキストを付けてセキュリティ例外を送出します。サブジェクトが無効になる原因には以下のものがあります。

  • サブジェクトのプリンシパルに対応するプリンシパル検証プロバイダがコンフィグレーションされていない (つまり WebLogic Security フレームワークでそのサブジェクトを検証する手段がない)


    注意 :

    サブジェクトには複数のプリンシパルを格納できるため (それぞれ異なる認証プロバイダの LoginModule によって格納される)、プリンシパルは複数の異なるプリンシパル検証プロバイダを持つことができます。

  • このセキュリティ ドメインとは異なる資格を使用する別の WebLogic Server セキュリティ ドメインで署名されたプリンシパルがあり、呼び出し側がそれを現在のドメインで使用しようとしている

  • セキュリティを低下させる目的で作成された無効な署名を持つプリンシパルがある

  • プリンシパルが署名されていないサブジェクトがある

プリンシパル検証プロセス

図 6-1 に示すとおり、ユーザはユーザ名とパスワードの組み合わせを使ってシステムにログインしようとします。WebLogic Server は、コンフィグレーション済みの認証プロバイダの LoginModule を呼び出すことによって信頼を確立します。LoginModule は、ユーザのユーザ名とパスワードを検証し、JAAS (Java Authentication and Authorization Service) の要件に従って、プリンシパルが格納されたサブジェクトを返します。

図 6-1 プリンシパル検証プロセス

図 6-1 の説明は図の下のリンクをクリックしてください。
「図 6-1 プリンシパル検証プロセス」の説明

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 インタフェースを実装する必要があります。

WLSPrincipals は、WebLogic Security フレームワークではなく PrincipalValidatorImpl でのみ使用されます。認証プロバイダは、独自のプリンシパル検証プロバイダを実装することも、PrincipalValidatorImpl を使用することもできます。認証プロバイダでカスタム プリンシパル検証プロバイダをコンフィグレーションする場合、WLSPrincipals インタフェースは使用されません。

認証プロバイダは、PrincipalValidatorImpl を使用する場合、WLSPrincipals インタフェースを実装する必要があります。


WebLogic プリンシパル検証プロバイダには、WLSUserImpl および WLSGroupImpl という名前の WLSUser インタフェースおよび WLSGroup インタフェースの実装が含まれています。これらは、weblogic.security.principal パッケージに定義されています。また、PrincipalValidatorImpl という名前の PrincipalValidator SSPI の実装も含まれています。これは weblogic.security.provider パッケージに定義されています。PrincipalValidatorImpl クラスの sign() メソッドは、ランダム シードを生成し、そのランダム シードに基づいてダイジェストを計算します。(PrincipalValidator SSPI の詳細については、「PrincipalValidator SSPI の実装」を参照してください。)

WebLogic プリンシパル検証プロバイダの使い方

名前が付いているだけの単純なユーザおよびグループ プリンシパルがある状態で、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 プリンシパル以外のプリンシパルを検証する場合は、カスタム プリンシパル検証プロバイダを開発する必要があります。

カスタム プリンシパル検証プロバイダの開発方法

カスタム プリンシパル検証プロバイダを開発するには、以下の方法があります。

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 を参照してください。