2017-09-24 21 views
0

EJBセキュリティがWebLogic Server上でどのように機能するかを理解しようとしています。私はこのようにそれを解釈WeblogicでのEJBセキュリティのコンフィグレーション

<security-role-assignment> 
    <role-name>beanA_users</role-name> 
    <principal-name>runas_a</principal-name> 
</security-role-assignment> 
<run-as-role-assignment> 
    <role-name>beanA_users</role-name> 
    <run-as-principal-name>runas_a</run-as-principal-name> 
</run-as-role-assignment> 

は私が

<session> 
    <ejb-name>BeanA</ejb-name> 
     .... 
     <security-identity>    
      <run-as> 
       <role-name>beanA_users</role-name> 
      </run-as> 
     </security-identity> 
</session> 

     <assembly-descriptor> 
      <security-role> 
       <role-name>beanA_users</role-name> 
      </security-role>  
      <container-transaction>  
       <method> 
        <ejb-name>BeanA</ejb-name> 
       <method-name>*</method-name> 
       </method> 
      </container-transaction> 
     </assembly-descriptor> 

とのweblogic-ejb-jar.xmlの

のejb-jar.xmlでの構成を以下でEJBを持ってBeanAはとして実行しますbeanA_users。 "runas_a"はbeanA_usersの1つです。したがって、BeanAはrunas_aユーザーとして実行されます。また、BeanA_usersロール内のすべてのユーザーは、すべてのBeanAメソッドの呼び出しを許可されています。つまり、Bean_Aはrunas_aとして実行されており、runas_aだけがそのメソッドを呼び出すことができます。これは正しいです?

しかし、このEJBを以下のコンフィグレーションを持つ別のEJBから呼び出すと、私はこの問題を解決できます。 BeanではないBeanBのBeanB_usersロールに割り当てられたプリンシパルのアクセス許可を設定しますか?

のejb-jar.xmlの:

<session>  
    <ejb-name>BeanB</ejb-name> 
      ... 
     <security-identity>    
      <run-as> 
       <role-name>beanB_users</role-name> 
      </run-as> 
     </security-identity> 
</session> 

のweblogic-ejb-jar.xmlの:

<run-as-role-assignment> 
    <role-name>beanB_users</role-name> 
    <run-as-principal-name>runas_b</run-as-principal-name> 
</run-as-role-assignment> 

編集:

、それがどのように見えるのejb-jar.xmlのスキーマを読んだ後この例のBean Aは、<assembly-descriptor>要素にアクセス権を定義していません。セキュリティロールのみを定義します。私はこれがすべてのEJBがそのメソッドを呼び出すことができる理由であると推測します。しかし、なぜその場合にセキュリティロールの割り当てを定義するのでしょうか?例えば、BeanAが要素内で次のものを持っていた場合、その場合、runas_bプリンシパルがパーミッションに含まれていないので、BeanBが通過するのをブロックするでしょうか?

<method-permission> 
    <role-name>beanA_users</role-name> 
     <method> 
      <ejb-name>BeanA</ejb-n‌​ame> 
       <method-name>*</method-name> 
     </method‌​> 
</method-permission‌​> 

答えて

0

ここではスティックの端が間違っています。

追加する場合:

<security-identity>    
     <run-as> 
      <role-name>beanA_users</role-name> 
     </run-as> 
    </security-identity> 

をBean定義に、これはむしろ、ユーザが扇動何よりも、それは自分自身を扇動そのBean上の任意の呼び出しに適用されるべきであるどのような役割のWebLogicを伝えます。

このセキュリティIDは、EJBタイマーメソッドとMDBのonMessageメソッドに適用されます(正しくリコールすれば、いくつかのハウスキーピング操作)。

<run-as-role-assignment>...</run-as-role-assignment>要素を持つWebLogic拡張機能では、これらのメソッド呼び出しのうち、javax.ejb.EJBContext.getCallerPrincipal()anonymous以外のものを返すように、これらのメソッド呼び出しに定義されたプリンシパルを追加します。

このセキュリティ情報は、通常、WebアプリケーションのログインユーザーのIDから伝播されます。

通常、ユーザーは、アプリケーションサーバーによって提供されるセキュリティドメインに接続されたサーブレットベースのWebアプリケーションを通じて認証されます。サーブレット・コンテナは、入ってくるHTTPリクエストをユーザープリンシパルに関連付けます。ロールベースのアクセスを実行するには、そのユーザープリンシパルを1つ以上の「ロール」に関連付ける必要があります(ベンダーに依存した方法で行われますが、多くの場合JAASに関連付けられます)。ユーザーにロールがない場合、コンテナは、デプロイメント記述子または関連付けられた@javax.annotation.security.RolesAllowedアノテーションのセキュリティロール宣言によって保護されたサーブレットまたはダウンストリームEJBを呼び出すすべての試行を拒否します。サーブレットコンテナによって確立されたセキュリティコンテキストは、正常に戻るかセキュリティロールによってブロックされるまで、後続のEJBコールのチェーンを通じて伝播されます。

詳細については、「サーブレット仕様」および「EJB仕様」の「セキュリティ」の章を参照してください。

+0

EJB Aを呼び出すのは何ですか? –

+0

しかし、EJB AがEJB Xのメソッドを呼び出す場合、EJB XはEJB Aの "run-as"プリンシパルに基づいてメソッドへのメソッドアクセス許可を設定できます。これを行うには、それ自身のセキュリティロールを定義し、 ejb-jar.xmlの要素でそのセキュリティロールの権限を定義します。私はちょうど私がEJB BからEJB Aを呼び出すときに、そのメソッドにアクセスできるのかと疑問に思っていました。私の推測では、セキュリティロールがあってもBean Aにはパーミッションが定義されていないからです。 –

+0

EJB AはEJB Bによって呼び出されます。 –

関連する問題