EJBコンテナへの認証情報の伝播は以下の2つの方法があります。
EJBコンテナでは伝播された認証情報にマッピングされたロールを使用して認可が行われます。
クライアント(Jakarta EEアプリケーションクライアント、Webアプリケーション)で認証された情報をEJBコンテナへ伝播します。
呼出し元deployment descriptorファイルの<run-as>タグ、または@RunAsアノテーションでロールを指定できます。
この場合、指定されたロールにマッピングされた認証情報(グループまたはユーザ)をEJBコンテナへ伝播します。
run-asまたは@RunAsアノテーションに指定されたロールと認証情報とのマッピングはGlassFish Serverのdeployment descriptorファイルに定義します。定義されていない場合はアプリケーションの配備に失敗します。
Servletにrun-asを指定した場合の定義例
インターネット上に公開されたWebアプリケーションのように、だれでもアクセス可能なWebアプリケーションからアクセス制限されたEJBアプリケーションを呼び出す場合に有効です。
以下に手順を示します。
deployment descriptor (web.xml)ファイルにrun-asを定義
Servletが動作するロール(user)を定義します。
GlassFish Serverのdeployment descriptor (glassfish-web.xml)ファイルにsecurity-role-mappingを定義
Servletのロール(user)に対してEJBコンテナに伝播する認証情報(ejb-user1)を定義します。
GlassFish Serverのdeployment descriptor (glassfish-ejb-jar.xml)ファイルにsecurity-role-mappingを定義
Servletから伝播される認証情報(ejb-user1)に対してEJBが動作するためのロール(admin)を定義します。
deployment descriptor(web.xml)
<servlet>
  <servlet-name>cart</servlet-name>
  <servlet-class>com.fujitsu.appsrv.sample.Cart</servlet-class>
  <run-as>
    <role-name>user</role-name>
  </run-as>
</servlet>GlassFish Serverのdeployment descriptor(glassfish-web.xml)
<security-role-mapping> <role-name>user</role-name> <principal-name>ejb-user1</principal-name> </security-role-mapping>
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>GlassFish Serverの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アプリケーションを呼び出す場合に有効です。
以下に手順を示します。
deployment descriptor (ejb-jar.xml)ファイルにrun-asを定義
EJB1が動作するロール(user)を定義します。
EJB1のGlassFish Serverのdeployment descriptor (glassfish-ejb-jar.xml)ファイルにsecurity-role-mappingを定義
EJB1のロール(user)に対してEJBコンテナに伝播する認証情報(ejb-user1)を定義します。
EJB2のGlassFish Serverのdeployment descriptor (glassfish-ejb-jar.xml)ファイルにsecurity-role-mappingを定義
EJB1から伝播される認証情報(ejb-user1)に対してEJBが動作するためのロール(admin)を定義します。
deployment descriptor(ejb-jar.xml)
<enterprise-beans>
  <security-identity>
    <run-as>
      <role-name>user</role-name>
    </run-as>
  </security-identity>
</enterprise-beans>GlassFish Serverのdeployment descriptor(glassfish-ejb-jar.xml)
<security-role-mapping> <role-name>user</role-name> <principal-name>ejb-user1</principal-name> </security-role-mapping>
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>GlassFish Serverのdeployment descriptor(glassfish-ejb-jar.xml)
<security-role-mapping> <role-name>admin</role-name> <principal-name>ejb-user1</principal-name> </security-role-mapping>
注意
EJBコンテナへの認証情報の伝播の注意事項
別マシン上のEJBを呼び出す場合は、glassfish-ejb-jar.xmlのior-security-configタグでIIOP通信の認証、通信データの完全性、機密性を設定する必要があります。
security-role-mappingに1つのロールに対して複数のprincipalが定義されている場合は、以下の方法でEJBコンテナに伝播する認証情報を特定する必要があります。
Servletの場合:
GlassFish Serverのdeployment descriptor (glassfish-web.xml)ファイルに特定するprincipalをservletタグ配下のprincipal-nameタグで定義します。
EJBの場合:
GlassFish Serverのdeployment descriptor (glassfish-ejb-jar.xml)ファイルに特定するprincipalをprincipalタグで定義します。