1.2. セキュリティアイデンティティ

Enterprise Java Bean (EJB) は、<security-identity> 要素を使用して別の EJB がコンポーネントでメソッドを呼び出すときに、別の EJB が使用しなければならないアイデンティティを特定することができます。図1.2「security-identity 要素」<security-identity> 要素、その子要素、属性について説明しています。
security-identity 要素

図1.2 security-identity 要素

呼び出しアイデンティティは現在の呼び出し側のアイデンティティ、または特定のロールとなることができます。アプリケーションアセンブラは <use-caller-identity> 子要素を持つ <security-identity> 要素を使用します。これは現在の呼び出し側のアイデンティティが EJB によるメソッド呼び出しのセキュリティアイデンティティとして伝播されることを示しています。呼び出し側のアイデンティティの伝播は、明示的な <security-identity> 要素宣言がないときに使用されるデフォルトです。
別の方法として、アプリケーションアセンブラは <run-as> または <role-name> 子要素を使用して、<role-name> 要素値によって提供される特定のセキュリティロールが EJB によるメソッド呼び出しのセキュリティアイデンティティとして使用されるよう指定できます。
これにより呼び出し側のアイデンティティを EJBContext.getCallerPrincipal() メソッドで見られるように変更することはありません。むしろ呼び出し側のセキュリティロールは <run-as> または <role-name> 要素値によって指定される単一のロールに設定されます。
<run-as> 要素を使用するユースケースとして、外部のクライアントが内部の EJB にアクセスできないようにします。この動作を設定するには、内部の EJB <method-permission> 要素を割り当てます。これにより外部クライアントに割り当てられたことがないロールへのアクセスを制限します。次に、内部の EJB を使用する必要がある EJB は制限されたロールに等しい <run-as> または <role-name> で設定されます。次の記述子の一部は <security-identity> 要素の使用例を説明しています。
<!-- A sample ejb-jar.xml fragment -->
<ejb-jar>
    <enterprise-beans>
        <session>
            <ejb-name>ASessionBean</ejb-name>
            <!-- ... -->
            <security-identity>
                <use-caller-identity/>
            </security-identity>
        </session>
        <session>
            <ejb-name>RunAsBean</ejb-name>
            <!-- ... -->
            <security-identity>
                <run-as>
                    <description>A private internal role</description>
                    <role-name>InternalRole</role-name>
                </run-as>
            </security-identity>
        </session>
    </enterprise-beans>
    <!-- ... -->
</ejb-jar>
<run-as> を使用して発信呼び出しに特定のロールを割り当てる場合、anonymous という名前のプリンシパルがすべての発信呼び出しに割り当てられます。別のプリンシパルにその呼び出しを関連付けたい場合は、jboss.xml ファイルの Bean と <run-as-principal> を関連付ける必要があります。次の例では internal という名前のプリンシパルを前述の例からの RunAsBean と関連付けます。
<session>
    <ejb-name>RunAsBean</ejb-name>
    <security-identity>
        <run-as-principal>internal</run-as-principal>
    </security-identity>
</session>
<run-as> 要素は web.xml ファイルのサーブレット定義でも使用できます。次の例では ロール InternalRole をサーブレットに割り当てる方法を示しています。
<servlet>
    <servlet-name>AServlet</servlet-name>
    <!-- ... -->
    <run-as> 
        <role-name>InternalRole</role-name>
    </run-as>
</servlet>
このサーブレットからの呼び出しは匿名 principal と関連付けられます。<run-as-principal> 要素は run-as ロールと合う特定のプリンシパルを割り当てるため jboss-web.xml ファイルで使用できます。次の例では internal という名前のプリンシパルを上記のサーブレットと関連付ける方法を示しています。
<servlet>
    <servlet-name>AServlet</servlet-name>
    <run-as-principal>internal</run-as-principal>
</servlet>