2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SimpleSAMLphp で SAML 2.0 によるシングルサインオン (SSO) の動作を確認してみた

Last updated at Posted at 2020-06-03

0. 前提条件

マシン IPアドレス
IdP CentOS 7 192.168.56.10
SP1 CentOS 7 192.168.56.11
SP2 CentOS 7 192.168.56.12

1. 事前準備【全てのサーバ】

# mv -i /etc/selinux/config /etc/selinux/config.orig
# sed 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config.orig >/etc/selinux/config
# setenforce permissive

# firewall-cmd --add-service=http --permanent
# firewall-cmd --reload

# mv -i /etc/chrony.conf /etc/chrony.conf.orig
# sed '/^server/d; 1,/^$/s/^$/server time.nist.gov iburst\
/' /etc/chrony.conf.orig >/etc/chrony.conf
# systemctl restart chronyd

SimpleSAMLphp の動作に時刻同期は必須です。pool.centos.org は不安定なため、NICT の NTP サーバを指定しています。

2. パッケージのインストールと設定【全てのサーバ】

# yum install -y --disablerepo=updates httpd php php-mbstring php-xml

# mv -i /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.orig
# cat /etc/httpd/conf/httpd.conf.orig - <<EOF >/etc/httpd/conf/httpd.conf

<IfModule mod_alias.c>
    Alias /simplesaml /var/www/simplesamlphp/www

    <Directory "/var/www/simplesamlphp/www">
        Require all granted
    </Directory>

    SetEnv SIMPLESAMLPHP_CONFIG_DIR /var/www/simplesamlphp/config
</IfModule>
EOF

# mv -i /etc/php.ini /etc/php.ini.orig
# sed '/^; Dynamic Extensions ;$/,/^$/s/^$/\
extention=mbstring.so\
/' /etc/php.ini.orig >/etc/php.ini

# systemctl enable httpd
# systemctl start httpd

3. SimpleSAMLphp のダウンロードと配置【全てのサーバ】

# curl -LO https://github.com/simplesamlphp/simplesamlphp/releases/download/v1.16.3/simplesamlphp-1.16.3.tar.gz
# tar -xzf simplesamlphp-1.16.3.tar.gz
# chown -hR root:root simplesamlphp-1.16.3
# mv -i simplesamlphp-1.16.3 /var/www/simplesamlphp

本稿執筆時点で、より新しい SimpleSAMLphp 1.18.7 がリリースされていますが、CentOS 7 に同梱の PHP 5.4.X 上では SimpleSAMLphp 1.16.3 より新しいリリースは動作しません。

4. IdP の設定【IdP CentOS 7】

# cd /var/www/simplesamlphp/
# mv -i config/config.php config/config.php.orig
# sed "
  s/'auth.adminpassword' => '123'/'auth.adminpassword' => 'admin1'/;
  s/'secretsalt' => 'defaultsecretsalt'/'secretsalt' => '"\
`env LC_CTYPE=C tr -c -d '0123456789abcdefghijklmnopqrstuvwxyz' </dev/urandom |
dd bs=32 count=1 2>/dev/null;echo`"'/;
  s/'enable.saml20-idp' => false/'enable.saml20-idp' => true/;
  " config/config.php.orig >config/config.php

# mv -i config/authsources.php config/authsources.php.orig
# sed "\$i\\
    'example-userpass' => array(\\
        'exampleauth:UserPass',\\
        'user1:pass1' => array(\\
            'uid' => array('user1'),\\
            'eduPersonAffiliation' => array('member', 'admin'),\\
        ), \\
        'user2:pass2' => array(\\
            'uid' => array('user2'),\\
            'eduPersonAffiliation' => array('member', 'developer'),\\
        ),\\
    ),\\

" config/authsources.php.orig >config/authsources.php
# touch modules/exampleauth/enable

# openssl req -newkey rsa:2048 -new -x509 -days 3652 -nodes \
-subj /C=JP/ST=Tokyo/CN=MyIdP -out cert/server.crt -keyout cert/server.pem
  1. ブラウザで http://192.168.56.10/simplesaml/ にアクセスし、「認証」タブをクリックします。
    1.png
  2. 「管理者でログイン」をクリックします。
    2.png
  3. ユーザ名:admin、パスワード:admin1 でログインします。
    3.png
  4. 「連携」タブをクリックします。
    4.png
  5. 「SAML 2.0 IdPメタデータ」リージョンの「メタデータを表示」をクリックします。
    5.png
  6. 「SAML 2.0 用のメタデータXMLフォーマット」の内容をクリップボードにコピーします。
    7.png
  7. 左上冒頭の「SAML 2.0 IdPメタデータ」 (タイトル) をクリックし、「連携」タブをクリックします。
  8. 「ツール」リージョンの「XML を SimpleSAMLphpメタデータに変換」をクリックします。
    9.png
  9. テキスト領域にクリップボードの内容を貼り付け、「パース」ボタンをクリックします。
    10.png
  10. 「saml20-idp-remote」リージョンの内容をクリップボードにコピーします。
    12.png
  11. SP1 の /var/www/simplesamlphp/metadata/saml20-idp-remote.php の末尾に追記します。
  12. SP2 の /var/www/simplesamlphp/metadata/saml20-idp-remote.php の末尾に追記します。

5. SP1 の設定【SP1 CentOS 7】

# cd /var/www/simplesamlphp/
# mv -i config/config.php config/config.php.orig
sed "
  s/'auth.adminpassword' => '123'/'auth.adminpassword' => 'admin1'/;
  s/'secretsalt' => 'defaultsecretsalt'/'secretsalt' => '"\
`env LC_CTYPE=C tr -c -d '0123456789abcdefghijklmnopqrstuvwxyz' </dev/urandom |
dd bs=32 count=1 2>/dev/null;echo`"'/;
  " config/config.php.orig >config/config.php
  1. ブラウザで http://192.168.56.11/simplesaml/ にアクセスし、「連携」タブをクリックします。
    21.png
  2. SAML 2.0 SPメタデータ」リージョンの「メタデータを表示」をクリックします。
    22.png
  3. 「SAML 2.0 用のメタデータXMLフォーマット」の内容をクリップボードにコピーします。
    24.png
  4. ブラウザで http://192.168.56.10/simplesaml/admin/metadata-converter.php にアクセスします。
    27.png
  5. ログイン画面が表示された場合は、ユーザ名:admin、パスワード:admin1 でログインします。
  6. 「saml20-sp-remote」リージョンの内容をクリップボードにコピーします。
    29b.png
  7. IdP の /var/www/simplesamlphp/metadata/saml20-sp-remote.php の末尾に追記します。

6. SP2 の設定【SP2 CentOS 7】

# cd /var/www/simplesamlphp/
sed "
  s/'auth.adminpassword' => '123'/'auth.adminpassword' => 'admin1'/;
  s/'secretsalt' => 'defaultsecretsalt'/'secretsalt' => '"\
`env LC_CTYPE=C tr -c -d '0123456789abcdefghijklmnopqrstuvwxyz' </dev/urandom |
dd bs=32 count=1 2>/dev/null;echo`"'/;
  " config/config.php.orig >config/config.php
  1. ブラウザで別のタブを開き、http://192.168.56.12/simplesaml/ にアクセスし、「連携」タブをクリックします。
    31.png
  2. 「SAML 2.0 SPメタデータ」リージョンの「メタデータを表示」をクリックします。
    32.png
  3. 「SAML 2.0 用のメタデータXMLフォーマット」の内容をクリップボードにコピーします。
    33a.png
  4. ブラウザで http://192.168.56.10/simplesaml/admin/metadata-converter.php にアクセスします。
    35.png
  5. ログイン画面が表示された場合は、ユーザ名:admin、パスワード:admin1 でログインします。
  6. 「saml20-sp-remote」リージョンの内容をクリップボードにコピーします。
    37.png
  7. IdP の /var/www/simplesamlphp/metadata/saml20-sp-remote.php の末尾に追記します。

7. 動作確認 (シングルサインオンによるログインとログアウト)

  1. ブラウザで http://192.168.56.11/simplesaml/ にアクセスし、「認証」タブをクリックします。
    41.png
  2. 「設定されている認証元をテスト」をクリックします。
    42.png
  3. 「default-sp」をクリックします。
    43.png
  4. 「選択」ボタンをクリックします。
    44.png
  5. ユーザ名:user1、パスワード:pass1 でログインします。
    45.png
  6. ブラウザで別のタブを起動し、 http://192.168.56.12/simplesaml/ にアクセスします。
    46.png
  7. 「認証」タブをクリックします。
    47.png
  8. 「設定されている認証元をテスト」をクリックします。
    48.png
  9. 「default-sp」をクリックします。
    49.png
  10. 「選択」ボタンをクリックします。
    50.png
  11. この時、ログイン画面が表示されず、既にログインされた状態になれば、シングルサインオンによるログインに成功です。
    51.png
  12. 画面左下の「ログアウト」をクリックします。
  13. 最初のタブ (SP1 へ接続) を再読み込み (リロード) し、「選択」ボタンをクリックします。
    53.png
  14. この時、既にログインされた状態にならず、ログイン画面が表示されれば、シングルサインオンによるログアウトに成功です。
    54.png
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?