BEA ホーム | 製品 | dev2dev | support | askBEA
 ドキュメントのダウンロード   サイト マップ   Glossary 
検索

WebLogic Security プログラマーズ ガイド

 Previous Next Contents Index PDF で侮ヲ  

エンタープライズ JavaBean (EJB) のセキュリティ対策

WebLogic Server は エンタープライズ JavaBean (EJB) を保護する J2EE セキュリティ モデルをサポートします。これには、宣言による認可 (このマニュアルでは宣言によるセキュリティと呼ぶ) およびプログラムによる認可 (このマニュアルではプログラムによるセキュリティと呼ぶ) のサポートが含まれます。

この節では、以下のトピックについて説明します。

注意: EJB の保護には、デプロイメント記述子ファイルと Administration Console を使用できます。Administration Console を使用しての EJB の保護については、「WebLogic リソースのセキュリティ」を参照してください。

 


J2EE セキュリティ モデル

Sun Microsystems, Inc. のマニュアル『Designing Enterprise Applications with the J2EE Platform, Second Edition』の「Section 9.3 Authorization」に、以下のような記述があります。

「J2EE アーキテクチャにおいて、コンテナはホストするコンポーネントとその呼び出し側との間の認可境界として機能します。認可境界は、コンテナの認証境界内に存在するので、認可は正常に実行される認証との関連で考慮されます。着信呼び出しの場合、コンテナは呼び出し側の資格のセキュリティ属性と、対象コンポーネントのアクセス制御ルールを比較します。ルール要件が満たされていれば、呼び出しは許可されます。それ以外の場合、この呼び出しは拒否されます。」

「アクセス制御ルールの定義には、能力とパーミッションという 2 つの基本的アプローチが存在します。能力は呼び出し側が実行できる操作、パーミッションは操作を実行できるユーザを焦点とします。J2EE アプリケーション プログラミング モデルは、パーミッションを焦点とします。J2EE アーキテクチャにおいて、デプロイヤの役割はアプリケーションのパーミッション モデルをその操作環境におけるユーザの能力にマップすることです。」

次にこのマニュアルでは、J2EE アーキテクチャ、宣言による認可、およびプログラムによる認可を使用してアプリケーション リソースへのアクセスを制御する 2 つの方法について説明します。

Sun Microsystems, Inc. の発行によるマニュアル『Designing Enterprise Applications with the J2EE Platform, Second Edition』は、http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/security/security4.html からオンラインで入手できます。

宣言による認可

Sun Microsystems, Inc. のマニュアル『Designing Enterprise Applications with the J2EE Platform, Second Edition』の「Section 9.3.1 Authorization」に、以下のような記述があります。

「デプロイヤは、J2EE アプリケーションと関連のコンテナによって実施されるアクセス制御ルールを設定します。デプロイヤは、デプロイメント ツールを使用して、通常はアプリケーション アセンブラによって供給されるアプリケーション パーミッション モデルを、操作環境に固有のポリシーおよびメカニズムにマップします。アプリケーション パーミッション モデルは、デプロイメント記述子で定義されます。」

WebLogic Server は EJB において宣言による認可を実装するためのデプロイメント記述子の使用をサポートしています。

注意: 宣言による認可は、このマニュアルでは宣言によるセキュリティとも呼ばれます。

Sun Microsystems, Inc. の発行によるマニュアル『Designing Enterprise Applications with the J2EE Platform, Second Edition』は、http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/security/security4.html からオンラインで入手できます。

プログラムによる認可

Sun Microsystems, Inc. のマニュアル『Designing Enterprise Applications with the J2EE Platform, Second Edition』の「Section 9.3.2 Programmatic Authorization」に、以下のような記述があります。

「J2EE コンテナは、コンポーネントにメソッド呼び出しをディスパッチする前に、アクセス制御の決定を行います。コンポーネントの論理または状態は、これらのアクセス決定を考慮に入れません。しかし、コンポーネントは EJBContext.isCallerInRole (エンタープライズ Bean コード用) および HttpServletRequest.isUserInRole (Web コンポーネント用) の 2 つのメソッドを使用して、きめ細かいアクセス制御を行うことが可能です。コンポーネントはこれらのメソッドを使用して、呼び出しのパラメータ、コンポーネントの初期状態、または呼び出しの時間などその他の要因に基づきコンポーネントによって選択された特権が、呼び出し側に付与されているかどうかを判断します。」

「これらの機能の 1 つを呼び出すコンポーネントのアプリケーション コンポーネント プロバイダは、すべての呼び出しで使用されるあらゆる個別の roleName 値を宣言する必要があります。これらの宣言は、デプロイメント記述子では security-role-ref 要素として登場します。各 security-role-ref 要素は、アプリケーションに roleName として組み込まれた特権名をセキュリティ ロールにリンクします。最終的には、デプロイヤはアプリケーションに組み込まれた特権名と、デプロイメント記述子で定義されたセキュリティ ロールの間のリンクを確立します。特権名とセキュリティ ロールの間のリンクは、同じアプリケーション内でもコンポーネントごとに異なる場合があります。」

「特定の特権をテストするだけでなく、アプリケーション コンポーネントでは EJBContext.getCallerPrincipal または HttpServletRequest.getUserPrincipal を使用して取得した呼び出し側 ID と、作成時のコンポーネントの状態に組み込まれている識別された呼び出し側 ID を比較できます。呼び出し側 ID が識別された呼び出し側のものに等しければ、コンポーネントは呼び出し側に処理の続行を許可できます。等しくなければ、コンポーネントは呼び出し側がそれ以上の対話を行わないようにできます。コンテナによって返された呼び出し側のプリンシパルは、呼び出し側が使用した認証メカニズムによって決まります。また、同じメカニズムによる同じユーザ認証に対してでも、異なったベンダからのコンテナは異なったプリンシパルを返す場合があります。プリンシパルの形式の変動性を考慮に入れるため、コンポーネントのアクセス決定に識別された呼び出し側の状態を適用することを選択した開発者は、同一ユーザを表す複数の識別された呼び出し側 ID がコンポーネントと関連付けられることを許容する必要があります。これは特に、アプリケーションの融通性や移植性が優先される場合に、推奨されます。」

WebLogic Server は、 EJB におけるプログラムによる認可を実装するための EJBContext.isCallerInRole メソッドと EJBContext.getCallerPrincipal メソッドの使用、および security-role-ref 要素の使用をサポートしています。

注意: プログラムによる認可は、このマニュアルではプログラムによるセキュリティとも呼ばれます。

Sun Microsystems, Inc. の発行によるマニュアル『Designing Enterprise Applications with the J2EE Platform, Second Edition』は、http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/security/security4.html からオンラインで入手できます。

宣言による認可とプログラムによる認可

Sun Microsystems, Inc. のマニュアル『Designing Enterprise Applications with the J2EE Platform, Second Edition』の「Section 9.3.3 Declarative Versus Programmatic Authorization」に、以下のような記述があります。

「デプロイヤによってコンフィグレーションされる外部アクセス制御ポリシーと、コンポーネント プロバイダによってアプリケーションに組み込まれた内部ポリシーの間にはトレードオフが存在します。アプリケーションが作成された後では、外部ポリシーのほうが高い融通性を持ちます。アプリケーションが記述されている過程では、内部ポリシーのほうが融通性の高い機能を提供します。また、外部ポリシーはデプロイヤにとって透過的で完全に理解可能であるのに対し、内部ポリシーはアプリケーションに埋め込まれており、これを完全に理解できるのはアプリケーション開発者のみである可能性があります。ある特定のコンポーネントとメソッドについて認可モデルを選択する際には、これらのトレードオフを検討する必要があります。」

Sun Microsystems, Inc. の発行によるマニュアル『Designing Enterprise Applications with the J2EE Platform, Second Edition』は、http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/security/security4.html からオンラインで入手できます。

 


EJB での宣言によるセキュリティの使用

EJB への宣言によってセキュリティを実装するには、デプロイメント記述子 (ejb-jar.xml および weblogic-ejb-jar.xml) を使用してセキュリティ要件を定義します。リスト5-1 に、ejb-jar.xml および weblogic-ejb-jar.xml デプロイメント記述子を使用してセキュリティ ロール名をセキュリティ レルムにマップする例を示します。デプロイメント記述子は、アプリケーションの論理的なセキュリティ要件を実行時の定義にマップします。また、実行時には、EJB コンテナがセキュリティ定義を使って要件を実施します。

EJB デプロイメント記述子でセキュリティをコンフィグレーションするには、次の手順を実行します (リスト5-1 を参照)。

  1. テキスト エディタを使用して、ejb-jar.xml および weblogic-ejb-jar.xml デプロイメント記述子ファイルを作成します。

  2. ejb-jar.xml ファイルに、セキュリティ ロール名、EJB 名、およびメソッド名を定義します (太字テキストを参照)。

    注意: セキュリティ ロール名を指定する場合、以下の規約と制限に従ってください。

  1. WebLogic 固有の EJB デプロイメント記述子ファイル weblogic-ejb-jar.xml にセキュリティ ロール名を定義し、それをセキュリティ レルム内の 1 つまたは複数のプリンシパル (ユーザまたはグループ) にリンクします。

    weblogic-ejb-jar.xml ファイルでセキュリティをコンフィグレーションする方法の詳細については、『WebLogic エンタープライズ JavaBeans プログラマーズ ガイド』の「weblogic-ejb-jar.xml デプロイメント 記述子要素」を参照してください。

コード リスト 5-1 ejb-jar.xml および weblogic-ejb-jar.xml ファイルを使用したセキュリティ ロール名とセキュリティ レルムのマッピング

ejb-jar.xml のエントリ :
         ...
<assembly-descriptor>
<security-role>
<role-name>manger</role-name>
</security-role>
<security-role>
<role-name>east</role-name>
</security-role>
<method-permission>
<role-name>manager</role-name>
<role-name>east</role-name>
<method>
<ejb-name>accountsPayable</ejb-name>
<method-name>getReceipts</method-name>
</method>
</method-permission>
<method-permission>
<unchecked/>
<method>
<ejb-name>vacationAccrued</ejb-name>
<method-name>uncheckedGetCompanyTotal</method-name>
</method>
</method-permission>
...
</assembly-descriptor>
...
weblogic-ejb-jar.xml のエントリ :
  <security-role-assignment>
<role-name>manager</role-name>
<principal-name>al</principal-name>
<principal-name>george</principal-name>
<principal-name>ralph</principal-name>
</security-role-assignment>
...

 


EJB のセキュリティ関連のデプロイメント記述子

以下のトピックでは、EJB のセキュリティ要件を定義するために ejb-jar.xml および weblogic-ejb-jar.xml ファイルで使用されるデプロイメント記述子の要素について説明します。

ejb-jar.xml デプロイメント記述子

以下の ejb-jar.xml のデプロイメント記述子の要素は、WebLogic Server でセキュリティ要件を定義するために使用されます。

この節の情報は、Sun Microsystems, Inc. 提供の ejb-jar.xml の文書型記述子 (DTD) に基づいています。 ejb-jar.xml の DTD は、http://java.sun.com/dtd/ejb-jar_2_0.dtd にあります。

method

method 要素は、エンタープライズ Bean のホームまたはコンポーネント インタフェースのメソッド、あるいはメッセージ駆動型 Bean の場合に Bean の onMessage メソッド (またはメソッドのセット) を示すために使用されます。

次の表では、method 要素内で定義できる要素について説明します。

要素

必須/
省略可能

説明

<description>

省略可能

メソッドの説明文。

<ejb-name>

必須

ejb-jar.xml ファイルで宣言されているエンタープライズ Bean のいずれかの名前を指定する。

<method-intf>

省略可能

エンタープライズ Bean のホーム インタフェースとコンポーネント インタフェースの両方で定義された同じ署名を持つメソッドを識別できるようにする。

<method-name>

必須

エンタープライズ Bean のメソッドの名前またはアスタリスク (*) を指定する。 アスタリスクは、要素がエンタープライズ Bean のコンポーネントおよびホーム インタフェースのすべてのメソッドを表す場合に使用する。

<method-params>

省略可能

Java タイプのメソッド パラメータの完全修飾名のリストが含まれる。

使用する場所

method 要素は、method-permission 要素内で使用されます。

method 要素の使用例については、リスト5-1を参照してください。

method-permission

method-permission 要素では、1 つまたは複数のエンタープライズ Bean メソッドの呼び出しを許可されている 1 つまたは複数のセキュリティ ロールを指定します。 method-permission 要素は、説明 (省略可能)、セキュリティ ロール名のリストまたはメソッドが認可に関してチェックされないことを示すインジケータ、およびメソッドの要素のリストから成ります。

method-permission 要素内のセキュリティ ロールは、デプロイメント記述子の security-role 要素で定義されており、メソッドは、エンタープライズ Bean のコンポーネントまたはホーム インタフェースで定義されているメソッドでなければなりません。

次の表では、method-permission 要素内で定義できる要素について説明します。

要素

必須/
省略可能

説明

<description>

省略可能

このセキュリティ制約の説明文。

<role-name> または <unchecked>

必須

role-name 要素または unchecked 要素を指定する必要がある。

  • role-name 要素には、セキュリティ ロールの名前が含まれる。 この名前は、NMTOKEN の命名規則に準拠しなければならない。

  • unchecked 要素には、メソッドがメソッド呼び出しの前にコンテナによる認可のチェックを受けないことを指定する。

<method>

必須

エンタープライズ Bean のホームまたはコンポーネント インタフェースのメソッド、あるいはメッセージ駆動型 Bean の場合に Bean の onMessage メソッド (またはメソッドのセット) を指定する。

使用する場所

method-permission 要素は、assembly-descriptor 要素内で使用されます。

method-permission 要素の使用例については、リスト5-1を参照してください。

role-name

role-name 要素には、セキュリティ ロールの名前が含まれます。 この名前は、NMTOKEN の命名規則に準拠しなければなりません。

使用する場所

role-name 要素は、method-permissionrun-assecurity-role、および security-role-ref 要素内で使用されます。

role-name 要素の使用例については、リスト5-7を参照してください。

run-as

run-as 要素には、エンタープライズ Bean を実行するための run-as ID を指定します。 この要素には、省略可能な説明とセキュリティ ロールの名前が含まれます。

使用する場所

run-as 要素は、security-identity 要素内で使用されます。

run-as 要素の使用例については、リスト5-7を参照してください。

security-identity

security-identity 要素には、エンタープライズ Bean のメソッドを実行するために呼び出し側のセキュリティ ID を使用するか、または特定の run-as ID を使用するかを指定します。 この要素には、省略可能な説明と使用するセキュリティ ID の指定が含まれます。

次の表では、security-identity 要素内で定義できる要素について説明します。

要素

必須/
省略可能

説明

<description>

省略可能

セキュリティ ID の説明文。

<use-caller-identity> または <run-as>

必須

use-caller-identity 要素または run-as 要素を指定しなければならない。

  • use-caller-identity 要素には、エンタープライズ Bean のメソッドを実行するためのセキュリティ ID として、呼び出し側のセキュリティ ID を使用することを指定する。

  • run-as 要素には、エンタープライズ Bean を実行するための run-as ID を指定する。 この要素には、省略可能な説明とセキュリティ ロールの名前が含まれる。

使用する場所

security-identity 要素は、entitymessage-driven、および session 要素内で使用されます。

security-identity 要素の使用例については、リスト5-3リスト5-7を参照してください。

security-role

security-role 要素には、セキュリティ ロールの定義が指定されます。 定義は、セキュリティ ロールの説明 (省略可能) とセキュリティ ロール名から成ります。

使用する場所

security-role 要素は、assembly-descriptor 要素内で使用されます。

assembly-descriptor 要素の使用例については、リスト5-1を参照してください。

security-role-ref

security-role-ref 要素には、エンタープライズ Bean のコード内のセキュリティ ロール参照の宣言が含まれます。 この宣言は、省略可能な説明、コードで使用されているセキュリティ ロール名、およびセキュリティ ロールへのリンク (省略可能) から成ります。 セキュリティ ロールが指定されていない場合、デプロイヤが適切なセキュリティ ロールを選択する必要があります。

role-name 要素の値は、EJBContext.isCallerInRole(String roleName) メソッドまたは HttpServletRequest.isUserInRole(String role) メソッドに対するパラメータとして使用される String でなければなりません。

使用する場所

security-role-ref 要素は、entity および session 要素内で使用されます。

security-role-ref 要素の使用例については、リスト5-2 を参照してください。

コード リスト 5-2 security-role-ref 要素の例

<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN' 'http://java.sun.com/dtd/ejb-jar_2_0.dtd'>
<ejb-jar>
<enterprise-beans>
...
<session>
<ejb-name>SecuritySLEJB</ejb-name>
<home>weblogic.ejb20.security.SecuritySLHome</home>
<remote>weblogic.ejb20.security.SecuritySL</remote>
<ejb-class>weblogic.ejb20.security.SecuritySLBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<security-role-ref>
<role-name>rolenamedifffromlink</role-name>
<role-link>role121SL</role-link>
</security-role-ref>
<security-role-ref>
<role-name>roleForRemotes</role-name>
<role-link>roleForRemotes</role-link>
</security-role-ref>
<security-role-ref>
<role-name>roleForLocalAndRemote</role-name>
<role-link>roleForLocalAndRemote</role-link>
</security-role-ref>
</session>
...
</enterprise-beans>
</ejb-jar>

unchecked

unchecked 要素には、メソッドがメソッド呼び出しの前にコンテナによる認可のチェックを受けないことを指定します。

使用する場所

unchecked 要素は、method-permission 要素内で使用されます。

unchecked 要素の使用例については、リスト5-1を参照してください。

use-caller-identity

use-caller-identity 要素には、エンタープライズ Bean のメソッドを実行するためのセキュリティ ID として、呼び出し側のセキュリティ ID を使用することを指定します。

使用する場所

use-caller-identity 要素は、security-identity 要素内で使用されます。

use-caller-identity 要素の使用例については、リスト5-3 を参照してください。

コード リスト 5-3 use-caller-identity 要素の例

<ejb-jar>
<enterprise-beans>
    <session>
<ejb-name>SecurityEJB</ejb-name>
<home>weblogic.ejb20.SecuritySLHome</home>
<remote>weblogic.ejb20.SecuritySL</remote>
<local-home>
weblogic.ejb20.SecurityLocalSLHome
</local-home>
<local>weblogic.ejb20.SecurityLocalSL</local>
<ejb-class>weblogic.ejb20.SecuritySLBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
    <message-driven>
<ejb-name>SecurityEJB</ejb-name>
<ejb-class>weblogic.ejb20.SecuritySLBean</ejb-class>
<transaction-type>Container</transaction-type>
<security-identity>
<use-caller-identity/>
</security-identity>
</message-driven>
  </enterprise-beans>
</ejb-jar>

weblogic-ejb-jar.xml デプロイメント記述子

以下の weblogic-ejb-jar.xml デプロイメント記述子の要素は、WebLogic Server でセキュリティ要件を定義するために使用されます。

client-authentication

client-authentication 要素は、EJB がクライアント認証をサポートするか、または、必要とするかを指定します。

次の表に、指定可能な設定を定義してあります。

設定

定義

なし

クライアント認証はサポートされない。

Supported

クライアント認証はサポートされるが、必須ではない。

Required

クライアント認証は必須となる。

client-authentication 要素の使用例については、リスト5-6を参照してください。

client-cert-authentication

client-cert-authentication 要素は、EJB が転送レベルでのクライアント証明書認証をサポートするか、または、必要とするかを指定します。

次の表に、指定可能な設定を定義してあります。

設定

定義

なし

クライアント証明書認証はサポートされない。

Supported

クライアント証明書認証はサポートされるが、必須ではない。

Required

クライアント証明書認証は必須となる。

client-cert-authentication 要素の使用例については、リスト5-9を参照してください。

confidentiality

confidentiality 要素は、その EJB における転送の機密性の要件を指定します。 confidentiality 要素を使用すると、他のエンティティに内容を見られることなく、クライアントとサーバ間でデータが送信されることが保証されます。

次の表に、指定可能な設定を定義してあります。

設定

定義

なし

機密性はサポートされない。

Supported

機密性はサポートされるが、必須ではない。

Required

機密性は必須となる。

confidentiality 要素の使用例については、リスト5-9を参照してください。

global-role

WebLogic Server 7.0 SP1 以降では、global-role 要素の weblogic-ejb-jar.xml デプロイメント記述子での使用がサポートされています。 principal-name 要素の代わりにこの要素を使用すると、role-name 要素によってデプロイメント記述子に定義された weblogic-ejb-jar.xml ファイル内のセキュリティ ロールが Administration Console で指定したマッピングを使用するよう指定できます。

global-role 要素を使用すると、特定の EJB のデプロイメント記述子に定義されたセキュリティ ロールごとに特定のセキュリティ ロール マッピングを指定する必要がなくなります。代わりに、Administration Console を使用して定義済みの各ロールに対する特定のロール マッピングをいつでも指定および変更できます。 さらに、この要素は一部の EJB に対して使用できるので、セキュリティ レルムの [一般] タブの [デプロイメント記述子内のセキュリティ データを無視] 属性を有効にする必要がありません。このため、同じセキュリティ レルムの中で、デプロイメント記述子を使用して一部の EJB のセキュリティを指定および変更する一方、Administration Console を使用して他のアプリケーションのセキュリティを指定および変更できます。

注意: セキュリティ ロール名を指定する場合、以下の規約と制限に従ってください。

使用する場所

global-role 要素は、security-role-assignment 要素内で使用されます。

リスト5-4リスト5-5 は、weblogic-ejb-jar.xml デプロイメント記述子での global-role 要素の使い方を比較により示しています。 リスト5-5 では、weblogic-ejb-jar.xml 内の「manager」の global-role 要素は、セキュリティが getReceipts メソッドにおいて正しくコンフィグレーションされるためには、Administration Console で manager に対応するプリンシパルが作成される必要があることを意味します。

コード リスト 5-4 ejb-jar.xml および weblogic-ejb-jar.xml デプロイメント記述子を使用しての EJB におけるセキュリティ ロールのマッピング

ejb-jar.xml のエントリ :
...
<assembly-descriptor>
<security-role>
<role-name>manger</role-name>
</security-role>
<security-role>
<role-name>east</role-name>
</security-role>
<method-permission>
<role-name>manager</role-name>
<role-name>east</role-name>
<method>
<ejb-name>accountsPayable</ejb-name>
<method-name>getReceipts</method-name>
</method>
</method-permission>
...
</assembly-descriptor>
...
weblogic-ejb-jar.xml のエントリ :
  <security-role-assignment>
<role-name>manager</role-name>
<principal-name>joe</principal-name>
<principal-name>Bill</principal-name>
<principal-name>Mary</principal-name>
...
</security-role-assignment>
...

コード リスト 5-5 EJB デプロイメント記述子におけるロール マッピング用の <global-role/> タグの使用

ejb-jar.xml のエントリ :
...
<assembly-descriptor>
<security-role>
<role-name>manger</role-name>
</security-role>
<security-role>
<role-name>east</role-name>
</security-role>
<method-permission>
<role-name>manager</role-name>
<role-name>east</role-name>
<method>
<ejb-name>accountsPayable</ejb-name>
<method-name>getReceipts</method-name>
</method>
</method-permission>
...
</assembly-descriptor>
...
weblogic-ejb-jar.xml のエントリ :
  <security-role-assignment>
<role-name>manager</role-name>
<global-role/>
...
</security-role-assignment>
...

Administration Console を使用しての EJB のセキュリティのコンフィグレーションの詳細については、『WebLogic リソースのセキュリティ』を参照してください。

identity-assertion

identity-assertion 要素は、EJB が ID アサーションをサポートするかどうかを指定します。

次の表に、指定可能な設定を定義してあります。

設定

定義

なし

ID アサーションはサポートされない。

Supported

ID アサーションはサポートされるが、必須ではない。

Required

ID アサーションは必須となる。

使用する場所

identity-assertion 要素は、iiop-security-descriptor 要素内で使用されます。

identity-assertion 要素の使用例については、リスト5-6を参照してください。

iiop-security-descriptor

iiop-security-descriptor 要素は、Bean レベルのセキュリティ コンフィグレーション パラメータを指定します。 これらのパラメータにより、インターオペラブル オブジェクト参照 (IOR) に含まれる IIOP セキュリティ情報が決定します。

iiop-security-descriptor 要素の使用例については、リスト5-6 を参照してください。

コード リスト 5-6 iiop-security-descriptor 要素の例

<weblogic-enterprise-bean>
<iiop-security-descriptor>
<transport-requirements>
<confidentiality>supported</confidentiality>
<integrity>supported</integrity>
<client-cert-authorization>
supported
</client-cert-authentication>
</transport-requirements>
<client-authentication>supported<client-authentication>
<identity-assertion>supported</identity-assertion>
</iiop-security-descriptor>
</weblogic-enterprise-bean>

integrity

integrity 要素は、EJB の転送の整合性の要件を指定します。 integrity 要素を使用すると、クライアントとサーバ間で、データが途中で変化することなく転送されることが保証されます。

次の表に、指定可能な設定を定義してあります。

設定

定義

なし

整合性はサポートされない。

Supported

整合性はサポートされるが、必須ではない。

Required

整合性は必須となる。

使用する場所

integrity 要素は、transport-requirements 要素内で使用されます。

integrity 要素の使用例については、リスト5-9を参照してください。

principal-name

principal-name 要素は、security-role-assignment 要素で指定したロール名に適用する、WebLogic Server セキュリティ レルム内のプリンシパルの名前を指定します。 security-role-assignment 要素には、少なくとも 1 つの principal が必要です。 各ロール名に対しては、複数の principal-name を定義できます。

使用する場所

principal-name 要素は、security-role-assignment 要素内で使用されます。

principal-name 要素の使用例については、リスト5-1を参照してください。

role-name

role-name 要素は、EJB プロバイダが対となる ejb-jar.xml ファイルに指定したアプリケーションのロール名を示します。 スタンザの次の principal-name 要素で、WebLogic Server のプリンシパルを、指定した role-name にマップします。

使用する場所

role-name 要素は、security-role-assignment 要素内で使用されます。

role-name 要素の使用例については、リスト5-1を参照してください。

run-as-identity-principal

run-as-identity-principal 要素は、セキュリティ プリンシパルを run-as ID として使用するかどうかを指定します。 この要素は、ejb-jar.xml ファイルの run-as 要素で指定したロールが、セキュリティ レルム内のユーザを表す単一のセキュリティ プリンシパルにマップされない場合に必要です。 これは以下の 2 つのケースで当てはまります。

使用する場所

run-as-identity-principal 要素は、weblogic-enterprise-bean 要素内で使用されます。

run-as-identity-principal 要素の使用例については、リスト5-7 を参照してください。

コード リスト 5-7 run-as-identity-principal 要素の例

ebj-jar.xml:
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>Caller2EJB</ejb-name>
<home>weblogic.ejb11.security.CallerBeanHome</home>
<remote>weblogic.ejb11.security.CallerBeanRemote</remote>
<ejb-class>weblogic.ejb11.security.CallerBean</ejb-class>
<session-type>Stateful</session-type>
<transaction-type>Container</transaction-type>
<ejb-ref><ejb-ref-name>Callee2Bean</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>weblogic.ejb11.security.CalleeBeanHome</home>
<remote>weblogic.ejb11.security.CalleeBeanRemote</remote>
</ejb-ref>
<security-role-ref>
<role-name>users1</role-name>
<role-link>users1</role-link>
</security-role-ref>
   <security-identity>
<run-as>
<role-name>users2</role-name>
</run-as>
</security-identity>
</session>
</enterprise-beans>
</ejb-jar>
woblogic-ejb-jar.xml:
<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>Caller2EJB</ejb-name>
<reference-descriptor>
<ejb-reference-description>
<ejb-ref-name>Callee2Bean</ejb-ref-name>
<jndi-name>security.Callee2Bean</jndi-name>
</ejb-reference-description>
</reference-descriptor>
<run-as-identity-principal>wsUser3</run-as-identity-principal>
</weblogic-enterprise-bean>
<security-role-assignment>
<role-name>user</role-name>
<principal-name>wsUser2</principal-name>
<principal-name>wsUser3</principal-name>
<principal-name>wsUser4</principal-name>
</security-role-assignment>
</weblogic-ejb-jar>

security-permission

security-permission 要素は、J2EE Sandbox と関連するセキュリティ パーミッションを指定します。

security-permission 要素の使用例については、リスト5-8 を参照してください。

security-permission-spec

security-permission-spec 要素は、セキュリティ ポリシー ファイル構文に基づいて単一のセキュリティ パーミッションを指定します。

詳細については、Sun によるセキュリティ パーミッション仕様の実装を参照してください。

http://java.sun.com/j2se/1.3/docs/guide/security/PolicyFiles.html#FileSyntax

注意: オプションの codebase および signedBy 句は無視してください。

使用する場所

security-permission-spec 要素は、security-permission 要素内で使用されます。

security-permission-spec 要素の使用例については、リスト5-8 を参照してください。

コード リスト 5-8 security-permission-spec 要素の例

<weblogic-ejb-jar>
<security-permission>
<description>Optional explanation goes here</description>
<security-permission-spec>
<!-
http://java.sun.com/j2se/1.3/docs/guide/security/PolicyFiles.html#FileSyntax
の構文に準拠する、「codebase」句や「signedBy」句を含まない単一の grant 文をここに記述します。次に例を示します。
-->
grant {
permission java.net.SocketPermission "*", "resolve";
};
</security-permission-spec>
</security-permission>
</weblogic-ejb-jar>

リスト5-8 では、permission java.net.SocketPermission はパーミッション クラス名を、"*" は対象名を、resolve (host/IP 名サービスのルックアップを解決する) はアクションを示します。

security-role-assignment

security-role-assignment 要素は、ejb-jar.xml ファイル内のアプリケーション ロールを、WebLogic Server で使用可能なセキュリティ プリンシパル名にマップします。

security-role-assignment 要素の使用例については、リスト5-1を参照してください。

transport-requirements

transport-requirements 要素は、EJB の転送の要件を定義します。

使用する場所

transport-requirements 要素は、iiop-security-descriptor 要素内で使用されます。

transport-requirements 要素の使用例については、リスト5-9 を参照してください。

コード リスト 5-9 transport-requirements 要素の例

<weblogic-enterprise-bean>
<iiop-security-descriptor>
<transport-requirements>
<confidentiality>supported</confidentiality>
<integrity>supported</integrity>
<client-cert-authorization>
supported
</client-cert-authentication>
</transport-requirements>
</iiop-security-descriptor>
</weblogic-enterprise-bean>

 


EJB でのプログラムによるセキュリティの使用

プログラムによるセキュリティを EJB に実装するには、javax.ejb.EJBContext.getCallerPrincipal() メソッドと javax.ejb.EJBContext.isCallerInRole() メソッドを使用します。

getCallerPrincipal

getCallerPrincipal() メソッドは、EJB の呼び出し元を特定するために使用します。 javax.ejb.EJBContext.getCallerPrincipal() メソッドは、呼び出し元のユーザの Subject に入っている場合に WLSUser Principal を返します。 WLSUser Principal が複数の場合、メソッドは、Subject.getPrincipals().iterator() メソッドで指定された順序の 1 番目を返します。 WLSUser Principal が存在しない場合、getCallerPrincipal() メソッドは WLSGroup Principal 以外の 1 番目を返します。 Principal が存在しない場合、またはすべての PrincipalWLSGroup タイプの場合、このメソッドは weblogic.security.WLSPrincipals.getAnonymousUserPrincipal() を返します。 この動作は weblogic.security.SubjectUtils.getUserPrincipal() のセマンティクスとほぼ同じですが、EJBContext.getCallerPrincipal()WLSPrincipals.getAnonmyousUserPrincipal() を返すのに対し、SubjectUtils.getUserPrincipal()null を返す点が異なります。

getCallerPrincipal() メソッドの使い方については、http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Security5.html を参照してください。

isCallerInRole

呼び出し元 (現在のユーザ) に割り当てられているセキュリティ ロールにおいてその実行スレッドでの WebLogic Server リソースに対するアクションの実行が許可されているかどうかを判定するには、isCallerInRole() メソッドを使用します。たとえば、現在のユーザが admin 特権を持っている場合、javax.ejb.EJBContext.isCallerInRole("admin") メソッドは true を返します。

isCallerInRole() メソッドの使い方については、http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Security5.html を参照してください。

isCallerInRole() メソッドの Javadoc については、http://java.sun.com/products/ejb/javadoc-1.1/javax/ejb/EJBContext.html#isCallerInRole(java.lang.String) を参照してください。

 

Back to Top Previous Next