CAS用PAMの実装した。

取り合えず先日作ったLDAPを参照するCASサーバを準備する。

* ダウンロード

- ダウンロード先: http://www.jasig.org/cas/download
- cas-server-3.3.4-release.tar.gz を落す。
- 参考資料:http://www.ja-sig.org/wiki/display/CASUM/LDAP

* サーバの設定

- 展開したファイルから war をサーブレットにデプロイする。
> cp cas-server-3.3.4/modules/cas-server-webapp-3.3.4.war $TOMCAT_HOME/webapps/cas.war

- CASの設定ファイルを修正する。
> vi $TOMCAT_HOME/webapps/cas/WEB-INF/deployerConfigContext.xml
-- ハンドラを SimpleTest からLDAPに差し替え

<property name="authenticationHandlers">
<list>
:
<!--
<bean
class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
-->
<bean class="org.jasig.cas.adaptors.ldap.BindLdapAuthenticationHandler" >
<property name="filter" value="cn=%u" />
<property name="searchBase" value="ou=People,dc=example,dc=com" />
<property name="contextSource" ref="contextSource" />
</bean>
</list>
</property>


-- LDAPハンドラの情報を丸々追加

<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource">
<property name="pooled" value="true"/>
<property name="urls">
<list>
<value>ldap://localhost/</value>
</list>
</property>
<property name="baseEnvironmentProperties">
<map>
<entry>
<key><value>java.naming.security.authentication</value></key>
<value>simple</value>
</entry>
</map>
</property>
</bean>


-- 当り前だがドメイン名とかはLDAP側の設定に依存。

* クライアント側

- CASの認証手順は非常にややこしいので図に書いて置く。

CAS.png



(1) Serviceは自身のURLをパラメータserviceに設定してCASに転送させる。
(2) CASはユーザ認証後、Serviceに対するチケットを発行する。
(3) ブラウザはチケットを持ってServiceにアクセスする。
(4) ServiceはCASにチケットの正当性を問い合わせ、正当ならばユーザ名を得る。
(5) Serviceは得られたユーザ名でログイン処理をする。
(6) 以降、認証済みアクセスとなる。

CASのクライアントはライブラリが有るようだが今回は自前で実装した。
とりあえず、CAS->LDAP で認証はできている。


* ロールの問題

CASって認証以外のユーザ情報取れないんだよね.. どうしよう...
とか思ってたら CAS principal object なんて言う機能が増えてる。
LDAPの情報とかも取れるみたいだ。
明日に続く...