ESB Muleはエンドポイントでトランスポート特有な又は汎用の認証方式を使ってリクエストを認証することができます。サービス・コンポーネントにメソッド単位での認証も行えます。このページは以下の課題に付いて説明します:
このページを読み終わった後に、JAAS, PGP, CASのようなセキュリティを使いたい場合や、サービス・コンポーネントの認証を有効にしたい場合は、以下のページも参照してくださ:
セキュリティ・マネージャー(Security Manager)
セキュリティ・マネージャーは、セキュリティ・マネージャーに設定された1つ以上のセキュリティ・プロバイダによりリクエストを認証します。セキュリティ・プロバイダは多くのリポジトリを使って認証することがでいます。例えばLDAP, JAAS,データベース(DAO), CAS(Yale Central Authentication Service)のような第三者セキュリティ・フレームワークのようなリポジトリを使うことができます。
ESB Muleはデフォルトでセキュリティの実装としてSpring Security 2を使っています。上に記述したようなセキュリティ・プロバイダを直ぐに使うことができます。Spring Security 2はSpringFramework-に基づいて開発されていて、UMOコンポーネントにメソッド単位の認証を行えるインターセプタを提供しています。それは、SpringFrameworkユーザに、統一したアプリケーション・セキュリティを提供するっという意味です。SpringFrameworkを利用されていないESB Muleユーザに、AcegiはアプリケーションでSpringFrameworkの利用を前提としません。全てのセキュリティはESB MuleセキュリティAPIを介して行うために、セキュリティの実装を置き換えることができます。
設定
以下はESB Muleでセキュリティ・プロバイダを1つの設定する例です。リポジトリとしてメモリ内のDAOを利用します。
<mule-configuration>
<security-manager>
<security-provider name="memory-dao"
className="org.mule.extras.acegi.AcegiProviderAdapter">
<properties>
<container-property name="delegate" reference="daoAuthenticationProvider"/>
</properties>
</security-provider>
</security-manager>
....
</mule-configuration>
「delegate」プロパティがコンテナのプロパティであることに注目してください。これは、取得するためのコンテナが必要なことを意味しています。ここではSpringFrameworkコンテナ・コンテキストからセキュリティ・プロバイダをロードします。複数のセキュリティ・プロバイダ(security-provider)たぐを設定することもできます:
<container-context
className="org.mule.extras.spring.SpringContainerContext">
<properties>
<property name="configFile" value="securityContext.xml"/>
</properties>
</container-context>
実際のセキュリティ・プロバイダ設定はSpringFramework Acegiの設定で行われます:
<beans>
<bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
<property name="authenticationDao">
<ref bean="inMemoryDaoImpl"/>
</property>
</bean>
<bean id="inMemoryDaoImpl" class="org.acegisecurity.providers.dao.memory.InMemoryDaoImpl">
<property name="userMap">
<value>
ross=ross,ROLE_ADMIN
anon=anon,ROLE_ANONYMOUS
</value>
</property>
</bean>
</beans>
ここではメモリ上で静的DAOセキュリティ・プロバイダを使ってユーザ認証を行います。なお、認証されるユーザrossとanonを定義しています。
暗号化処理(Encryption Strategies)
セキュリティ・マネージャ-に1つ以上の暗号化処理を設定することができます。暗号化処理を設定すると、ESB Muleの暗号化トランスフォーマ, セキュリティ・フィルタ,ssl又は httpsのようなセキュア・トランスポート・プロバイダを使うことができます。これらの暗号化処理はコンポーネント間で安全なメッセージ交換の設定を簡単にします。
<security-manager>
<encryption-strategy name="PBE"
className="org.mule.impl.security.PasswordBasedEncryptionStrategy">
<properties>
<property name="password" value="mule"/>
</properties>
</encryption-strategy>
</security-manager>
暗号化処理はフィルタうあトランスフォーマのようなシステムの他コンポーネントから参照することができます。
<transformers>
<transformer name="EncryptedToByteArray"
className="org.mule.transformers.encryption.DecryptionTransformer">
<properties>
<property name="strategyName" value="PBE"/>
</properties>
</transformer>
</transformers>
セキュリティ・フィルタ
オブジェクトにセキュリティ・フィルタを設定して受信リクエストを認証したり、認証情報を出力リクエストに添付することができます。
エンドポイント・セキュリティ・フィルタ
名前からも分かる通りに、このフィルタはエンドポイントに設定します。以下はHTTPエンドポイントにHTTP基本認証フィルタを設定する例です:
<endpoint address="http://localhost:4567">
<security-filter
className="org.mule.extras.acegi.filters.http.HttpBasicAuthenticationFilter">
<properties>
<property name="realm" value="mule-realm"/>
</properties>
</security-filter>
</endpoint>
リクエストを受信すると、リクエストの認証ヘッダ(Authentication header)が読み取られて、セキュリティ・マネージャーの全てのセキュリティ・プロバイダで認証されます。特定のセキュリティ・プロバイダのみで認証を行うようにするには、セキュリティ・プロバイダ名をコンマ「,」区切りで指定します:
<endpoint address="http://localhost:4567">
<security-filter useProviders="default,another"
className="org.mule.extras.acegi.filters.http.HttpBasicAuthenticationFilter"/>
</endpoint>