EJBコンテナへの認証情報の伝播は以下の2つの方法があります。
EJBコンテナでは伝播された認証情報にマッピングされたロールを使用して認可が行われます。
クライアント(Java EEアプリケーションクライアント、Webアプリケーション)で認証された情報をEJBコンテナへ伝播します。
呼出し元deployment descriptorファイルの<run-as>タグ、または@RunAsアノテーションでロールを指定できます。
この場合、指定されたロールにマッピングされた認証情報(グループまたはユーザ)をEJBコンテナへ伝播します。
run-asまたは@RunAsアノテーションに指定されたロールと認証情報とのマッピングはInterstage deployment descriptorファイルに定義します。定義されていない場合はアプリケーションの配備に失敗します。
Servletにrun-asを指定した場合の定義例
インターネット上に公開されたWebアプリケーションのように、だれでもアクセス可能なWebアプリケーションからアクセス制限されたEJBアプリケーションを呼び出す場合に有効です。
以下に手順を示します。
deployment descriptor (web.xml)ファイルにrun-asを定義
Servletが動作するロール(user)を定義します。
Interstage deployment descriptor (glassfish-web.xml)ファイルにsecurity-role-mappingを定義
Servletのロール(user)に対してEJBコンテナに伝播する認証情報(ejb-user1)を定義します。
Interstage 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.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>
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アプリケーションを呼び出す場合に有効です。
以下に手順を示します。
deployment descriptor (ejb-jar.xml)ファイルにrun-asを定義
EJB1が動作するロール(user)を定義します。
EJB1のInterstage deployment descriptor (glassfish-ejb-jar.xml)ファイルにsecurity-role-mappingを定義
EJB1のロール(user)に対してEJBコンテナに伝播する認証情報(ejb-user1)を定義します。
EJB2のInterstage 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>
Interstage 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>
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タグで定義します。