Version 1/3
-
Next » -
Current version
樋口 尚寿, 03/01/2012 09:41 am
SSO対応手順¶
shibbolethを利用したSSOに対応するための手順です。
現時点では CentOS5 64bit 環境を例に手順を記載しています。
また、ID同期の仕組みを実装していないため、動作検証の際にはアプリ側にShibboleth側と同じID・パスワードでユーザーを作成しておく必要があります。
※ID同期も今後検証していきます。
※下記手順はサムライクラウド検証環境に特化した情報が一部含まれています。順次整備していきますが、ご不明な点はお問合せください。
事前準備¶
PHP5.3のインストール¶
SamuraiSSO(SimpleSAMLphp)の動作にPHP 5.2以上が必要です。
また、代理認証スクリプトに php-pear パッケージが必要です。
本手順では、外部リポジトリからPHP 5.3を導入する手順を記載します。
- REMIリポジトリ登録
# cd /tmp # wget http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm # wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm # rpm -ivh epel-release-5-4.noarch.rpm # rpm -ivh remi-release-5.rpm
- インストール
# yum --enablerepo=remi,epel install php php-pear
Subversionのインストール¶
Subversionリポジトリからソースコードを取得するのに必要です。
- インストール
# yum install subversion
ホスト名の設定¶
hostnameコマンドで、適切にホスト名とIPアドレスが設定されていることを確認してください。
ホスト名が正しく設定されていない場合、セットアップおよびSSO動作が正常に機能しない場合があります。
- ホスト名
検証環境ではsamuraicloud.jp のサブドメインが表示される必要があります。# hostname
- IPアドレス
ローカルホスト(127.0.0.1)以外が表示されることを確認します。# hostname -i
テストユーザーの登録¶
動作検証の際にはアプリ側にShibboleth側と同じID・パスワードでユーザーを作成しておく必要があります。
※サムライクラウド検証環境のShibbolethを利用して検証を行いたい場合は、事務局までご相談ください。
SamuraiSSO¶
パッケージインストール¶
サムライクラウド連携に必要な、SAMLとOAuthのSPがセットになったパッケージです。
SAMLとしてSimpleSAMLphp、OAuthとしてoauth2-phpを含んでいます。
- 依存パッケージインストール
# yum --enablerepo=epel,remi install php-xml php-mcrypt
- リポジトリからファイル取得
下記コマンドでSubversionのリポジトリから取得・配置します。# cd /opt # svn export --username guest --password samurai --no-auth-cache https://dev.samuraicloud.jp/usvn/svn/samurai/branches/develop/sso/samuraisso/
- セットアップスクリプト実行
自動でキーペアの生成とSPの設定を行います。# cd samuraisso/saml/bin/ # ./setup_samuraisso.sh
完了時にコンソールに表示された情報をIdP管理者まで連絡してください。 - 動作確認
SimpleSAMLphpに含まれるサンプルスクリプトでSAMLが正しく設定できたか動作確認ができます。
https://example.samuraicloud.jp/samuraisso/example-simple/saml2-example.php
代理認証スクリプトの導入¶
SAMLに対応していないアプリケーションでも代理認証スクリプトを利用することでSAML対応することができます。
- スクリプトの設置
スクリプトはWEBアクセス可能な状態で配置する必要があります。
本手順では既にイントール済みのSamuraiSSOパッケージ内の、/opt/samuraisso/saml/www
として配置します。
下記コマンドでSubversionのリポジトリから取得・配置します。# cd /opt/samuraisso/saml/www # svn export --username guest --password samurai --no-auth-cache https://dev.samuraicloud.jp/usvn/svn/samurai/branches/develop/sso/proxylogin/
- スクリプト(proxylogin/forSimpleSAMLphp.php)を編集し、アプリに合わせてパラメータ類を調整する
変数名 意味 デフォルト値 例 備考 $app_login_url アプリのログインURL - https://example.samuraicloud.jp/login $app_top_url ログイン後のトップ画面URL - https://example.samuraicloud.jp/top $app_login_id_param ログイン時にPOSTするIDのパラメータ名 - id $app_login_pwd_param ログイン時にPOSTするパスワードのパラメータ名 - pw $app_login_post_params ログイン時のその他のパラメータ(連想配列) - $id_saml_attr_name IDとして使うSAML属性名 urn:oid:1.3.6.1.4.1.5923.1.1.1.6 urn:oid:1.3.6.1.4.1.5923.1.1.1.6 アプリのIDに記号が使えない場合はurn:oid:0.9.2342.19200300.100.1.1を指定してください $pwd_saml_attr_name パスワードとして使うSAML属性名 urn:oid:0.9.2342.19200300.100.4.19 urn:oid:0.9.2342.19200300.100.4.19 通常変更の必要ありません
- スクリプト名は任意のものに変更可能です。(index.php 等)
Shibboleth SP¶
パッケージインストール¶
- yum リポジトリ登録
# cd /etc/yum.repos.d/ # wget http://download.opensuse.org/repositories/security://shibboleth/CentOS_5/security:shibboleth.repo
- インストール
# yum install shibboleth.x86_64
設定変更¶
- shibboleth2.xml 編集
Shibboleth SPの動作に必要な設定を行います。
下記のようにvi等のエディタで編集します。# vi /etc/shibboleth/shibboleth2.xml
- 23行目
本SPのentityIDを指定します。サービス毎に固有の値である必要があります。
サムライクラウド検証環境では、書式を「https://ホスト名/shibboleth-sp」とします。<ApplicationDefaults entityID="https://sp.example.org/shibboleth"
↓変更(entityIDはサービス毎に固有のものにする)<ApplicationDefaults entityID="https://example.samuraicloud.jp/shibboleth-sp"
- 43行目
IdPのentityIDを指定します。
サムライクラウド検証環境では「https://shib.samuraicloud.jp/idp/shibboleth」となります。<SSO entityID="https://idp.example.org/shibboleth" discoveryProtocol="SAMLDS" discoveryURL="https://ds.example.org/DS/WAYF">
↓変更<SSO entityID="https://shib.samuraicloud.jp/idp/shibboleth" >
- 74行目
メタデータの取得場所を設定します。
サムライクラウド検証環境では「http://shib.samuraicloud.jp/idp-metadata.xml」となります。
↓新規追加<MetadataProvider type="XML" uri="http://shib.samuraicloud.jp/idp-metadata.xml" backingFilePath="federation-metadata.xml" reloadInterval="7200"> </MetadataProvider>
- 23行目
- attribute-map.xml 編集
SAMLアサーションに含まれる属性地をApache環境変数にマッピングする設定を行います。
下記のようにvi等のエディタで編集します。# vi /etc/shibboleth/attribute-map.xml
代理認証に必要となるcn(ログインID)とuserPassword(パスワード)を追加します。
↓新規追加(81-135行目はコメントアウトされています。)<Attribute name="urn:oid:0.9.2342.19200300.100.1.1" id="cn"/> <Attribute name="urn:oid:0.9.2342.19200300.100.4.19" id="userPassword"/>
キーペア(秘密鍵とX.509証明書)作成¶
SAMLで暗号化に必要なキーペアを作成します。
ここで作成した公開鍵(X.509証明書)をメタデータとして公開します。
- キーペア作成
ホスト名(-h)は環境に合わせて変更してください。cd /etc/shibboleth ./keygen.sh -f -h example.samuraicloud.jp
- メタデータ作成
作成したキーペアからメタデータを作成します。
ホスト名(-h)とentityID(-e)は環境に合わせて変更してください。# cd /etc/shibboleth/ # ./metagen.sh -c sp-cert.pem -h example.samuraicloud.jp -e "https://example.samuraicloud.jp/shibboleth-sp" > sp-metadata.xml
作成したメタデータををIdP管理者まで送付してください。
サービス再起動¶
- サービス再起動
サービスを再起動して設定を反映します。# service shibd restart # service httpd restart
代理認証スクリプトの導入¶
SAMLに対応していないアプリケーションでも代理認証スクリプトを利用することでSAML対応することができます。
- スクリプトの設置
スクリプトはWEBアクセス可能な状態で配置する必要があります。
本手順では、/var/www/html/proxylogin/
として配置します。
下記コマンドでSubversionのリポジトリから取得・配置します。# cd /var/www/html # svn export --username guest --password samurai --no-auth-cache http://dev.samuraicloud.jp/usvn/svn/samurai/branches/develop/sso/proxylogin/
- スクリプト(forShibbolethSP.php)を編集し、アプリに合わせてパラメータ類を調整します。
変数名 意味 デフォルト値 例 備考 $app_login_url アプリのログインURL - https://example.samuraicloud.jp/login $app_top_url ログイン後のトップ画面URL - https://example.samuraicloud.jp/top $app_login_id_param ログイン時にPOSTするIDのパラメータ名 - id $app_login_pwd_param ログイン時にPOSTするパスワードのパラメータ名 - pw $app_login_post_params ログイン時のその他のパラメータ(連想配列) - $id_srv_env_name IDとして使う環境変数名 eppn eppn アプリのIDに記号が使えない場合はcnを指定してください $pwd_srv_env_name パスワードとして使う環境変数名 userPassword userPassword 通常変更の必要ありません
- スクリプト名は任意のものに変更可能です。(index.php 等)
- Apache の設定追加
上記スクリプトをShibbolethでの認証対象とするための設定を追加します。
下記のようにvi等のエディタで設定を新規作成します。# vi /etc/httpd/conf.d/shibsso.conf
以下の内容で設定します。<Location /proxylogin> AuthType shibboleth ShibRequestSetting requireSession 1 require valid-user </Location>
- 再起動
設定を反映するために再起動します。service httpd restart
- ログイン
ログインできるか確認します。
https://example.samuraicloud.jp/proxylogin/forShibbolethSP.php - ログアウト
https://example.samuraicloud.jp/Shibboleth.sso/Logout
上記のURLへアクセスし、Status of Local Logout: Logout completed successfully.
と表示されることを確認。