You are here
CAS-3.4.2を使ったGoogleAppsのシングルサインオン設定
CASサーバを使ったGoogleAppsのシングルサインオン設定について日本語で書かれた分かりやすいページが意外と見あたらなかったので作ってみました。 英語の情報についてはJasigのページに一通り書いてあるのですが、設定情報の具体例が一部欠けていたりしますので設定ファイルのサンプルも掲載しておきます。
0.はじめに
tomcat(今回はtomcat6.0を利用)の動作環境を準備
動作確認環境:
CASサーバ:CAS 3.4.2
tomcat:FreeBSD7.2+tomcat6.0+diablo-jdk-1.6.0
Apache:FreeBSD7.2+Apache2.2.9+mod_proxy_ajp+mod_ssl
Apacheのみを外部に公開
Apacheと(tomcat上の)CASサーバで同一の公開鍵ペアを使用
1.CASサーバ用の公開鍵ペア・X509証明書を準備
#鍵ペアを作成
openssl genrsa -out private.key 1024
#private.keyファイルから公開鍵情報を取り出し(-pubout)
openssl rsa -pubout -in private.key -out public.key -inform PEM -outform DER
#秘密鍵情報の保存フォーマットをPKCS#8形式に変換
openssl pkcs8 -topk8 -inform PER -outform DER -nocrypt -in private.key -out private.p8
#自己署名証明書を作成(-x509)
openssl req -new -x509 -key private.key -out x509.pem -days 365
COMMON NAMEには外部からCASサーバにアクセスする時の
FQDN名を指定する
上で作った鍵ペア・証明書類を適当なディレクトリ(以下、$CERT)に
まとめておく
参考ページ:
http://www.ja-sig.org/wiki/display/CASUM/SAML+2.0+%28Google+Accounts+Int...
2.CASサーバの設定
2-1.JA-SIGのページ(http://www.jasig.org/cas)からCAS 3.4.2をダウンロード
cas-server-webapp-3.4.2.warをダウンロード
2-2.CASサーバのwarファイルを展開
cd $HOME
mkdir cas-server-webapp-3.4.2
cd cas-server-webapp-3.4.2
jar xvf ../cas-server-webapp-3.4.2.war
2-3.CASサーバで利用する鍵ファイルの配置
cd $HOME
cd cas-server-webapp-3.4.2/WEB-INF/classes
cp $CERT/private.p8 .
cp $CERT/public.key .
2-4.GoogleAccount連携用設定をCASサーバの設定ファイルに追加
cd $HOME/cas-server-webapp-3.4.2/WEB-INF
vi spring-configuration/argumentExtractorsConfiguration.xml
以下の設定を追加
------ここから-----
<bean
id="googleAccountsArgumentExtractor"
class="org.jasig.cas.web.support.GoogleAccountsArgumentExtractor"
p:privateKey-ref="privateKeyFactoryBean"
p:publicKey-ref="publicKeyFactoryBean"
p:httpClient-ref="httpClient" />
<bean
id="privateKeyFactoryBean"
class="org.jasig.cas.util.PrivateKeyFactoryBean"
p:location="classpath:endeavour-private.p8"
p:algorithm="RSA" />
<bean
id="publicKeyFactoryBean"
class="org.jasig.cas.util.PublicKeyFactoryBean"
p:location="classpath:endeavour-public.key"
p:algorithm="RSA" />
------ここまで-----
注:参考ページにあるサンプルではp:httpClient-ref="httpClient"の
記述がないが、これがないとエラーになる
同ファイルの以下の箇所にgoogleAccountsArgumentExtractorの
エントリを追加する
・変更前
<util:list id="argumentExtractors">
<ref bean="casArgumentExtractor" />
<ref bean="samlArgumentExtractor" />
</util:list>
・変更後
<util:list id="argumentExtractors">
<ref bean="casArgumentExtractor" />
<ref bean="samlArgumentExtractor" />
<ref bean="googleAccountsArgumentExtractor" />
</util:list>
2-5.SAML ResponseがPOSTされない問題への対応
CAS 3.4.2でspring webflow 2.xに移行した際に発生した不具合の模様
#2010/5/22時点で修正パッチ無し。CAS 3.5で修正(?)
以下の要領でページ遷移設定ファイルを変更する必要がある
cd $HOME/cas-server-webapp-3.4.2/WEB-INF
vi login-webflow.xml
(1)<action-state id="redirect">の項目を修正
・修正前
<action-state id="redirect">
<evaluate expression="flowScope.service.getResponse(requestScope.serviceTicketId)" result-type="org.jasig.cas.authentication.principal.Response" result="requestScope.response" />
<transition on="requestScope.response" to="postView" />
<transition to="redirectView" />
</action-state>
・修正後
<action-state id="redirect">
<evaluate expression="flowScope.service.getResponse(requestScope.serviceTicketId)" result-type="org.jasig.cas.authentication.principal.Response" result="requestScope.response" />
<transition to="postRedirect"/>
</action-state>
(2)<end-state id="postView" view="postResponseView">の項目を修正
・修正前
<end-state id="postView" view="postResponseView">
<output name="viewScope.parameters" value="requestScope.response.attributes" />
<output name="viewScope.originalUrl" value="flowScope.service.id" />
</end-state>
・修正後
<end-state id="postView" view="postResponseView">
<on-entry>
<set name="flowScope.parameters" value="requestScope.response.attributes"/>
<set name="flowScope.originalUrl" value="flowScope.service.id" />
</on-entry>
</end-state>
参考ページ:
http://www.ja-sig.org/wiki/display/CASUM/SAML+2.0+%28Google+Accounts+Int...
http://www.ja-sig.org/issues/browse/CAS-868;jsessionid=0045DD6B8C56D49DF...
SAML Protocol with Attribute Release
http://www.ja-sig.org/wiki/display/CASC/phpCAS+examples
2-6.ユーザ認証データベースの設定
LDAPの参照設定などを必要に応じて行う
2-7.tomcatでCASサーバを起動
以下の手順はホットデプロイを有効にしてあるtomcatの場合
cd $HOME/cas-server-webapp-3.4.2
jar cvf ../cas-server-webapp-3.4.2.war *
cp $HOME/cas-server-webapp-3.4.2.war $CATALINA_HOME/webapps
ホットデプロイしていない場合は適宜tomcatを再起動
例:
tomcat.sh stop
cp -rp $HOME/cas-server-webapp-3.4.2 $CATALINA_HOME/webapps
tomcat.sh start
3.GoogleAppsの設定
補足:シングルサインオンを有効にした後でも、管理者権限をもつユーザは
管理者画面からログインできる
3-1.シングルサインオン設定の登録
管理者権限でGoogleAppsにログイン
https://www.google.com/a/yourdomain.com/
SSO設定画面へ移動
https://www.google.com/a/cpanel/yourdomain.com/SetupSSO
3-2.CASサーバ情報の登録
ログイン ページの URL
https://your.casserver.com/cas-server-webapp-3.4.2/login
ログアウト ページ URL
https://your.casserver.com/cas-server-webapp-3.4.2/logout
パスワードの URL を変更
https://somewhere/appropriate
1.で作った証明書($CERT/x509.pem)をアップロード
「シングルサインオンを有効にする」にチェックを入れる
シングルサインオンの送信元を制限する場合は
ネットワークマスクを適宜設定
変更を保存
3-3.GoogleAppsにユーザを登録
https://www.google.com/a/cpanel/yourdomain.com/CreateUser
シングルサインオンするユーザについては
「次回ログイン時にパスワードの変更を要求する」
の設定はなくてよい。
この設定が残っていると、シングルサインオンした後で
パスワード変更画面が表示されてしまう。
3-4.GoogleAppsの各アプリにシングルサインオン
.メール - http://gml.yourdomain.com
.カレンダー - http://cal.yourdomain.com
.ドキュメント - http://doc.yourdomain.com
など
CASでユーザuserの認証に成功すると、GoogleApps側で
ユーザuser@yourdomain.comとしてログインが完了する
参考ページ:
Google Apps 用 SAML シングル サインオン (SSO) サービス
http://code.google.com/intl/ja/apis/apps/sso/saml_reference_implementati...
SSOに関するFAQ
http://code.google.com/intl/ja/googleapps/faq.html
Google Apps 管理者用ヘルプ
http://www.google.com/support/a/bin/answer.py?hl=jp&answer=60224
GoogleApps との SAML でのシングルサインオン
http://wikis.sun.com/pages/viewpage.action?pageId=67866335
GoogleApps側(サービスプロバイダ側)の設定はここに書いてある
添付 | サイズ |
---|---|
![]() | 1.77 KB |
![]() | 6.17 KB |