2009年11月14日土曜日

Grails + CAS、CASサーバ編 2

CASクライアントについてまとめる予定だったけど、予定を変更してCASサーバの非SSL化を先にまとめる。証明書の発行が面倒だとかいう理由らしい。

前回の設定に加えて、2つファイルを編集する。
まず、casサーバのURLを変更する。cas-server-3.3.4/cas-server-webapp/src/main/webapp/WEB-INF/cas.propertiesのsecurityContextまわりをhttps://localhost:8443からhttp://localhost:8080に変更する。

cas.securityContext.serviceProperties.service=http://localhost:8080/cas/services/j_acegi_cas_security_check
cas.securityContext.casProcessingFilterEntryPoint.loginUrl=http://localhost:8080/cas/login
cas.securityContext.ticketValidator.casServerUrlPrefix=http://localhost:8080/cas

次に、CASが落とすCookieをSSL通信でなくても送信するように変更する。
cas-server-3.3.4/cas-server-webapp/src/main/webapp/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xmlのp:cookieSecure="true"p:cookieSecure="false"に変更する。

<bean id="ticketGrantingTicketCookieGenerator"
class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="false"
p:cookieMaxAge="-1"
p:cookieName="CASTGC"
p:cookiePath="/cas" />

2009年11月7日土曜日

Grails + CAS、CASサーバ編

CASでSSOやることになったのでメモ。
ユーザ情報は既存のユーザ管理アプリのDBを使用する。

おっきく分けて3つ。
  1. Grails Spring Security Pluginでユーザ管理アプリを作る
  2. CASサーバの構築
  3. Grails Spring Security PluginでCASクライアント

3つめは次回。

ということで、まずは「Grails Spring Security Pluginでユーザ管理アプリを作る」は本題ではないのでちゃちゃっと作る。

grails create-app ums
cd ums
grails install-plugin acegi
grails create-auth-domains
grails generate-manager

データベースはpostgresql 8.3。
データベースユーザは"sa"でパスワードなし。
データベースはlocalohst:5432:umsdb
ユーザはPersonのまま(テーブル:person、カラムはusername、passwd、enabledなど)

次に、今回のメイン「CASサーバの構築」。やることは
  1. ダウンロード、展開
  2. ファイルを2つ編集
  3. ビルドして配備
まずはCAS ServerをJASIG Communityから落としてくる。
http://www.jasig.org/cas/download

今回使うのはCAS Server 3.3.4 Final。
cas-server-3.3.4-release.zipを落として展開する。

で、cas-server-3.3.4/cas-server-webapp/pom.xmlを編集、61行目のldapをjdbcにして、ついでにJDBCドライバとデータソース用のライブラリも追加しておく。

<dependency>
    <groupId>org.jasig.cas</groupId>
    <artifactId>cas-server-support-jdbc</artifactId>
    <version>${project.version}</version>
</dependency>
<dependency>
    <groupId>postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>8.3-603.jdbc3</version>
</dependency>
<dependency>
    <groupId>commons-dbcp</groupId>
    <artifactId>commons-dbcp</artifactId>
    <version>1.2</version>
</dependency>

cas-server-3.3.4/cas-server-webapp/src/main/webapp/WEB-INF/deployerConfigContext.xmlを編集、データソースとユーザテーブルの情報を設定する。
データソースのbeanを定義して
92行目のSimpleTestUsernamePasswordAuthenticationHandlerをSearchModeSearchDatabaseAuthenticationHandlerに差し替える。ユーザテーブル、ユーザIDカラム、パスワードカラム、パスワードのエンコード、データソースを設定してあげる。

<bean class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler">
    <property name="tableUsers"><value>person</value></property>
    <property name="fieldUser"><value>username</value></property>
    <property name="fieldPassword"><value>passwd</value></property>
    <property name="dataSource" ref="dataSource"/>
    <property name="passwordEncoder">
        <bean class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"> 
            <constructor-arg value="SHA1" />
        </bean>
    </property>
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName">
        <value>org.postgresql.Driver</value>
    </property>
    <property name="url">
        <value>jdbc:postgresql:umsdb</value>
    </property>
    <property name="username"><value>sa</value></property>
    <property name="password"><value></value></property>
</bean>

maven2でビルドする。

cd cas-server-3.3.4/cas-server-webapp/
mvn package


最後にTomcatに配備してhttp://localhost:8080/cas/login/にアクセスして確認しておk。

これでCASサーバの準備ができたので、次回はCASクライアント編。
JDBCTicketRegistryについても調査済みなので次々回あたりでまとめる。

参考にしたページ:
JDBC - CAS User Manual - JA-SIG Wiki