ページの先頭行へ戻る
Interstage Application Server Java EE運用ガイド(Java EE 6編)
Interstage

6.2.5 EJBコンテナへの認証情報の伝播

EJBコンテナへの認証情報の伝播は以下の2つの方法があります。
EJBコンテナでは伝播された認証情報にマッピングされたロールを使用して認可が行われます。

クライアントの認証情報をEJBコンテナへ伝播

クライアント(Java EEアプリケーションクライアント、Webアプリケーション)で認証された情報をEJBコンテナへ伝播します。

RunAs指定による呼出し

呼出し元deployment descriptorファイルの<run-as>タグ、または@RunAsアノテーションでロールを指定できます。
この場合、指定されたロールにマッピングされた認証情報(グループまたはユーザ)をEJBコンテナへ伝播します。

run-asまたは@RunAsアノテーションに指定されたロールと認証情報とのマッピングはInterstage deployment descriptorファイルに定義します。定義されていない場合はアプリケーションの配備に失敗します。

Servletにrun-asを指定した場合の定義例

インターネット上に公開されたWebアプリケーションのように、だれでもアクセス可能なWebアプリケーションからアクセス制限されたEJBアプリケーションを呼び出す場合に有効です。

以下に手順を示します。

  1. deployment descriptor (web.xml)ファイルにrun-asを定義
    Servletが動作するロール(user)を定義します。

  2. Interstage deployment descriptor (glassfish-web.xml)ファイルにsecurity-role-mappingを定義
    Servletのロール(user)に対してEJBコンテナに伝播する認証情報(ejb-user1)を定義します。

  3. Interstage deployment descriptor (glassfish-ejb-jar.xml)ファイルにsecurity-role-mappingを定義
    Servletから伝播される認証情報(ejb-user1)に対してEJBが動作するためのロール(admin)を定義します。


Servlet

deployment descriptor(web.xml)

<servlet>
  <servlet-name>cart</servlet-name>
  <servlet-class>com.fujitsu.interstage.sample.Cart</servlet-class>
  <run-as>
    <role-name>user</role-name>
  </run-as>
</servlet>

Interstage deployment descriptor(glassfish-web.xml)

<security-role-mapping>
  <role-name>user</role-name>
  <principal-name>ejb-user1</principal-name>
</security-role-mapping>
EJB

deployment descriptor(ejb-jar.xml)

<assembly-descriptor>
  <security-role>
    <role-name>admin</role-name>
  </security-role>
  <method-permission>
    <role-name>admin</role-name>
    <method>
      <ejb-name>CartBean</ejb-name>
      <method-name>addItem</method-name>
      <method-params>
        <method-param>java.lang.String</method-param>
      </method-params>
    </method>
  </method-permission>
</assembly-descriptor>

Interstage deployment descriptor(glassfish-ejb-jar.xml)

<security-role-mapping>
  <role-name>admin</role-name>
  <principal-name>ejb-user1</principal-name>
</security-role-mapping>

EJBにrun-asを指定した場合の定義例

Message-driven Beanからアクセス制限されたEJBアプリケーションを呼び出す場合に有効です。

以下に手順を示します。

  1. deployment descriptor (ejb-jar.xml)ファイルにrun-asを定義
    EJB1が動作するロール(user)を定義します。

  2. EJB1のInterstage deployment descriptor (glassfish-ejb-jar.xml)ファイルにsecurity-role-mappingを定義
    EJB1のロール(user)に対してEJBコンテナに伝播する認証情報(ejb-user1)を定義します。

  3. EJB2のInterstage deployment descriptor (glassfish-ejb-jar.xml)ファイルにsecurity-role-mappingを定義
    EJB1から伝播される認証情報(ejb-user1)に対してEJBが動作するためのロール(admin)を定義します。


EJB1

deployment descriptor(ejb-jar.xml)

<enterprise-beans>
  <security-identity>
    <run-as>
      <role-name>user</role-name>
    </run-as>
  </security-identity>
</enterprise-beans>

Interstage deployment descriptor(glassfish-ejb-jar.xml)

<security-role-mapping>
  <role-name>user</role-name>
  <principal-name>ejb-user1</principal-name>
</security-role-mapping>
EJB2

deployment descriptor(ejb-jar.xml)

<assembly-descriptor>
  <security-role>
    <role-name>ejb</role-name>
  </security-role>
  <method-permission>
    <role-name>admin</role-name>
    <method>
      <ejb-name>CartBean</ejb-name>
      <method-name>addItem</method-name>
      <method-params>
        <method-param>java.lang.String</method-param>
      </method-params>
    </method>
  </method-permission>
</assembly-descriptor>

Interstage deployment descriptor(glassfish-ejb-jar.xml)

<security-role-mapping>
  <role-name>admin</role-name>
  <principal-name>ejb-user1</principal-name>
</security-role-mapping>

注意

EJBコンテナへの認証情報の伝播の注意事項

  • security-role-mappingに1つのロールに対して複数のprincipalが定義されている場合は、以下の方法でEJBコンテナに伝播する認証情報を特定する必要があります。

    • Servletの場合:
      Interstage deployment descriptor (glassfish-web.xml)ファイルに特定するprincipalをservletタグ配下のprincipal-nameタグで定義します。

    • EJBの場合:
      Interstage deployment descriptor (glassfish-ejb-jar.xml)ファイルに特定するprincipalをprincipalタグで定義します。