はい、CAS が複数のソースに対して認証することは可能です。Bean には、;authenticationManager
という名前のプロパティが必要です。そこで、複数のBeanauthenticationHandlers
を定義します。AuthenticationHandler
私のセットアップでは、(Munin/Nagios からユーザーを監視するための) ローカル ファイルと認証ハンドラーがありますBindLdapAuthenticationHandler
。
<property name="authenticationHandlers">
<list>
<!-- This is the authentication handler that authenticates
services by means of callback via SSL, thereby validating
a server side SSL certificate. -->
<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" />
<bean class="org.jasig.cas.adaptors.generic.FileAuthenticationHandler" p:fileName="${cas.localuser.file}" />
<bean class="org.jasig.cas.adaptors.ldap.BindLdapAuthenticationHandler"
p:timeout="10000"
p:filter="${ldap.auth.filter}"
p:searchBase="${ldap.base.dn}"
p:ignorePartialResultException="true"
p:contextSource-ref="contextSource"
p:searchContextSource-ref="searchContextSource"
/>
</list>
</property>
認証したい他のもののための認証ハンドラーを追加するだけです。CAS LDAP ハンドラーについてはhttps://wiki.jasig.org/display/CASUM/LDAPを、CAS Active Directory ハンドラーについてはhttps://wiki.jasig.org/display/CASUM/Active+Directoryを確認してください。
この仕組みでは、CAS は各ハンドラーに対して順番に認証を試みます。最初に成功したもので、CAS ログインが成功します。そのため、LDAP に uid=jsmith のレコードがあり、AD に cn=jsmith のレコードがあり、両方が同じパスワードを持っている場合、CAS で最初に定義された方が常に優先されます! したがって、システム間でログイン ID の競合がないことを確認する必要があります。そうしないと、望ましくない副作用が発生する可能性があります (特に、LDAP の jsmith が AD の jsmith と同じ人物ではない場合)。
SAML 検証 ( for などmod_auth_cas
) を使用する場合は、他の考慮事項もある場合があります。attributeRepository
認証時に個人のレコードから返されるプロパティをリストする Bean を定義し、サービスが を使用してチケットを検証でき/samlValidate
ます。複数のディレクトリからプルできる Bean クラスがあるかどうかはわかりませんが、samlValidate
これを使用していない場合は問題にならないかもしれません。
それで、より良い方法はありますか?可能であれば、真の認証情報源を 1 つにまとめてください。
CASフェデレーションについて:いいえ。お互いのチケットを信頼するようにサーバーをセットアップできるかもしれませんが、代わりに、できるだけ少ない認証情報源に対して認証する 1 つの CAS 環境 (必要に応じてクラスター化することもできます) を使用することをお勧めします。