SimpleSAMLphp で開発用の SAML ID Provider を立てる
SAML によるシングルサインオンに対応したアプリを作るときに、開発環境としてお手軽に試せる ID Provider があると便利なので、SimpleSAMLphp でタダで作る。
OneLogin のアカウントを持っている場合は、 "SAML Test Connector (IdP)" を使えば簡単に作れる。
確認環境
- CentOS 6.5
- PHP 5.3.3
- SimpleSAMLphp 1.13.2
- onelogin/java-saml 1.1.2
インストール
simpleSAMLphp Installation and Configuration を参考にインストールする。
ダウンロードした SimpleSAMLphp のアーカイブを /var/simplesamlphp に展開し、Apache の設定で
Alias /simplesaml /var/simplesamlphp/www
PHP などが正しくインストールされていれば http://hostname/simplesaml/ で以下の様な画面が見える。
設定
admin ユーザのログインパスワード
// config/config.php
'auth.adminpassword' => 'test',
Web 画面でログインできるか確認する。
saml20-idp モジュールを有効化
// config/config.php
'enable.saml20-idp' => true,
Web 画面の設定タブの "SAML 2.0 IdP" が有効化されているか確認する。
認証方法を設定する(exampleauth)
### 有効化 $ touch modules/exampleauth/enable
ID = suer
、パスワード = test
でログインできるようにしておく。
// config/authsources.php <?php $config = array( 'example-userpass' => array( 'exampleauth:UserPass', 'suer:test' => array( 'uid' => array('suer'), 'eduPersonAffiliation' => array('member', 'employee'), ), ),
自己証明書を作成
$ mkdir -p cert $ cd cert $ openssl req -newkey rsa:2048 -new -x509 -days 3652 -nodes -out server.crt -keyout server.pem
設定は
// metadata/saml20-idp-hosted.php 'privatekey' => 'server.pem', 'certificate' => 'server.crt',
Service Provider の準備
ここでは確認のため、 GitHub - onelogin/java-saml: Java SAML toolkit の Sample アプリを使う。
$ git clone https://github.com/onelogin/java-saml.git $ cd java-saml $ mvn package -Dmaven.test.skip=true $ cd sample $ mvn jetty:run
Service Provider の登録
// metadata/saml20-sp-remote.php $metadata['http://localhost:8080/index.jsp'] = array( 'AssertionConsumerService' => 'http://localhost:8080/consume.jsp', 'SingleLogoutService' => '', 'NameIDFormat' => 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress', 'simplesaml.nameidattribute' => 'uid', 'simplesaml.attributes' => FALSE, );
http://localhost:8080/index.jsp や http://localhost:8080/consume.jsp は java-saml のサンプルアプリのアドレス。
Service Provider に登録する情報
Web ページの "連携" タブ > SAML 2.0 IdP メタデータの表示から確認
- ID Provider の URL: md:SingleSignOnService#Location の値(http://xxxxxx/xxxxxx/saml2/idp/SSOService.php)
- 証明書: ds:X509Certificate の値 をコピーするか、同ページからダウンロードすることもできる
java-saml のサンプルアプリに ID Provider を設定する
修正するのは以下の2箇所。
// src/main/webapp/index.jsp accSettings.setIdpSsoTargetUrl("ID Provider の URL");
// src/main/webapp/consume.jsp String certificateS = "証明書の内容";
確認
$ mvn jetty:run
ブラウザで http://localhost:8080/ にアクセスして、 SimpleSAMLphp 経由でシングルサインオンできれば成功。
一度目はログイン画面が表示される。
ログインに成功した場合もしくは既にログイン済みの場合、consume.jsp 転送されて ID が表示される。