ナビゲーションをスキップ

WebLogic Security サービスの開発

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

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

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

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

 


プリンシパル検証の概念

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

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

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

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

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

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

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

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

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

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

 


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

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

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

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


 

WebLogic Server は、指定されたプリンシパル検証プロバイダにサブジェクトを渡します。プリンシパル検証プロバイダは、そのプリンシパルに署名して、それらを WebLogic Server を通じてクライアント アプリケーションに返します。他のセキュリティ操作のためにサブジェクト内のプリンシパルが必要になった場合、同じプリンシパル検証プロバイダが、そのプリンシパルが署名時から変更されていないかどうかを検証します。

 


カスタム プリンシパル検証プロバイダを開発する必要があるか

WebLogic Server のデフォルト (アクティブ) セキュリティ レルムには、WebLogic プリンシパル検証プロバイダが含まれます。ID アサーション プロバイダが特定のタイプのトークンをサポートするのと同じように、プリンシパル検証プロバイダは特定のタイプのプリンシパルに対する署名と信頼性の確認を行います。WebLogic プリンシパル検証プロバイダは、WebLogic Server プリンシパルの署名と検証を行います。言い換えると、WebLogic Server ユーザまたは WebLogic Server グループを表すプリンシパルに対して署名と検証を行います。

注意 : weblogic.security パッケージの WLSPrincipals クラスを使用すると、プリンシパル (ユーザまたはグループ) が WebLogic Server に対して特別な意味を持っているかどうか (それが定義済みの WebLogic Server ユーザまたは WebLogic Server グループであるかどうか) が分かります。さらに、WebLogic Server ユーザまたはグループを表すプリンシパルは、weblogic.security.spi パッケージの WLSUser インタフェースと WLSGroup インタフェースを実装する必要があります。

WLSPrincipalsPrincipalValidatorImpl のみが使用し、セキュリティ フレームワークには使用されません。 認証プロバイダは独自のプリンシパル検証プロバイダを実装することも、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 プリンシパル検証プロバイダを使用する場合には、以下の方法があります。

独自の検証スキームがあり、WebLogic プリンシパル検証プロバイダを使用しない場合や、WebLogic Server プリンシパル以外のプリンシパルを検証する場合は、カスタム プリンシパル検証プロバイダを開発する必要があります。

 


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

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

PrincipalValidator SSPI を実装する

PrincipalValidator SSPI を実装するには、以下のメソッドの実装を提供する必要があります。

validate

public boolean validate(Principal principal) throws SecurityException;

validate メソッドはプリンシパルを 1 つ引数に取り、その有効性を検証しようとします。すなわち、このメソッドは、そのプリンシパルが署名されてから変更されていないかどうかを確認します。

sign

public boolean sign(Principal principal);

sign メソッドはプリンシパルを 1 つ引数に取り、それに署名して信頼を保証します。これにより、validate メソッドを使って、後でそのプリンシパルを検証できるようになります。

sign メソッドの実装は、悪意のある個人が容易に再現することのできない機密アルゴリズムでなければなりません。そのアルゴリズムを sign メソッド自体に組み込むか、sign メソッドがプリンシパルの署名に使用するトークンをサーバに要求するようにするか、またはプリンシパルを署名する他の手段を実装できます。

getPrincipalBaseClass

public Class getPrincipalBaseClass();

getPrincipalBaseClass メソッドは、このプリンシパル検証プロバイダが検証と署名の方法を理解しているプリンシパルの基本クラスを返します。

PrincipalValidator SSPI と上記メソッドの詳細については、「WebLogic Server 8.1 API リファレンス Javadoc」を参照してください。

 

フッタのナビゲーションのスキップ  ページの先頭 前 次