SimpleSAMLphp で開発用の SAML ID Provider を立てる

SAML によるシングルサインオンに対応したアプリを作るときに、開発環境としてお手軽に試せる ID Provider があると便利なので、SimpleSAMLphp でタダで作る。

OneLogin のアカウントを持っている場合は、 "SAML Test Connector (IdP)" を使えば簡単に作れる。

確認環境

インストール

simpleSAMLphp Installation and Configuration を参考にインストールする。

ダウンロードした SimpleSAMLphp のアーカイブを /var/simplesamlphp に展開し、Apache の設定で

Alias /simplesaml /var/simplesamlphp/www

PHP などが正しくインストールされていれば http://hostname/simplesaml/ で以下の様な画面が見える。

f:id:suer:20151120140055p:plain

設定

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.jsphttp://localhost:8080/consume.jspjava-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 = "証明書の内容";

確認

java-saml の sample フォルダで、

$ mvn jetty:run

ブラウザで http://localhost:8080/ にアクセスして、 SimpleSAMLphp 経由でシングルサインオンできれば成功。

一度目はログイン画面が表示される。 f:id:suer:20151120141659p:plain

ログインに成功した場合もしくは既にログイン済みの場合、consume.jsp 転送されて ID が表示される。 f:id:suer:20151120141829p:plain