SimpleSAMLphpを使ってSAMLに対応したサイトを作ろう
schedule 2018/03/14 refresh 2023/11/09
やりたいこと
SimpleSAMLphpを使ってSAMLサービスプロバイダー(SAML SP)を構築し、SeciossLinkからシングルサインオンをする
前提
CentOS 7.4のインストールと初期設定が完了していること
SeciossLink検証環境の申し込みが完了していること
(もちろん本契約しているSeciossLinkテナントでも大丈夫です)
※ 本番環境の場合は、適宜 ホスト名を“slinkdev.secioss.net”から”slink.secioss.com”に読み替えてください。
※ 本稿で使用しているSeciossLinkのテナントIDをexample.comです。こちらも適宜読み替えてください。
手順
1. 環境設定
まず、SimpleSAMLphpに必要なパッケージをインストールします。
|
面倒なのでSELinuxも無効化しておきましょう。
# setenforce 0 |
(再起動後も無効にする場合は、/etc/selinux/configも書き換えてください。)
2. SimpleSAMLphpのインストール
SimpleSAMLphpのホームページからパッケージをダウンロードしてインストールします。
本稿執筆時点(2018/03/07)では simplesamlphp-1.15.4.tar.gz が最新でした。
別のバージョンを使う場合は適宜読み替えてください。
# wget --content-disposition https://simplesamlphp.org/download?latest
|
3. SimpleSAMLphpの初期設定
SimpleSAMLphpの管理者ユーザーのパスワードを設定します。
任意のパスワードに変更してください。
/var/www/simplesamlphp/config/config.php
'auth.adminpassword' => '123', |
'enable.saml20-idp' => true, |
httpdにSimpleSAMLphpようの設定ファイルを追加します。
/etc/httpd/conf.d/simplesamlphp.conf
Alias /simplesaml /var/www/simplesamlphp/www
|
httpdを起動します。
# systemctl start httpd |
ファイアーウォールを設定している場合は、通信を許可しておきましょう。
# firewall-cmd --permanent --zone=public --add-service=https
|
4. SeciossLinkの設定
SeciossLinkの管理画面にログインし、SAML SPの新規登録を行います。
SAML SPを登録します。
項目名 |
設定値 |
サービスID | simplesaml
※ 任意の値でOK |
サービス名 | simplesaml
※ 任意の値でOK |
エンティティID | https://simplesaml.example.com
※ SAML SPのエンティティIDです。後で使います。設定値は任意の値でOKです。 |
Assertion Consumer Service | https://<<SAML SPのホスト名またはIP>>/simplesaml/module.php/saml/sp/saml2-acs.php/slink-sp |
ログアウトURL | https://<<SAML SPのホスト名またはIP>>/simplesaml/module.php/saml/sp/saml2-logout.php/slink-sp |
アクセス先URL | https://<<SAML SPのホスト名またはIP>>/simplesaml/module.php/core/authenticate.php?as=slink-sp |
IDの属性 | urn:oasis:names:tc:SAML:2.0:nameid-format:persistent |
登録したSAML SPをユーザーに割り当てます。
5. SimpleSAMLphpにSAML IdP追加
SimpleSAMLphpにSAML IDプロバイダー(SAML IdP)を追加します。
まず、SeciossLinkのメタデータをダウンロードします。
ブラウザなどで 下記URLにアクセスし、メタデータファイルをダウンロードしてください。
https://slinkdev.secioss.net/saml/metadata.php?tenant=example.com
※ 最後のexample.comはテナントIDです。
ダウンロードしたメタデータファイルを見ながらSimpleSAMLphpのメタデータに追記を行います。
/var/www/simplesamlphp/metadata/saml20-idp-remote.php
$metadata['https://slinkdev.secioss.net/example.com'] = array (
|
長いですが、書き換えが必要な個所は3か所だけです。
まず、entityidを2か所置き換えます。SeciossLinkのメタデータに記述されているentityIDに書き換えます。
サンプルでは’https://slinkdev.secioss.net/example.com’
次にX509CertificateをSeciossLinkのメタデータに記述されている証明書に書き換えます。
サンプルでは’MIIDtTCCAp2gAwIBAgIJ………JpxhEtrnWMo=’
SAML IdPの設定を追加します。
/var/www/simplesamlphp/config/authsources.php
'slink-sp' => array(
|
entityIDにはSeciossLinkの管理画面で設定したエンティティIDを設定します。
idpにはSeciossLinkのentityIDを設定します。
6. DEMOサイトにアクセスしてみよう
SimpleSAMLphpのDEMOサイトにアクセスしてみましょう。
ブラウザで下記のURLにアクセスしてください。
https://<<SAML SPのホスト名またはIP>>/simplesaml/module.php/core/authenticate.php?as=slink-sp
SeciossLinkのログイン画面にリダイレクトされます。
SeciossLinkでログインするとSimpleSAMLphpのデモ画面にリダイレクトします。
SeciossLinkで認証したユーザー情報が含まれているのが確認できます。
7. 独自WebサイトでSAML認証してみよう
では、次に独自Webサイトを作ってSAMLでシングルサインオンしてみましょう。
/var/www/html/index.php
<?php
|
ブラウザで下記URLにアクセスするとこんな感じに表示されます。
https://<<SAML SPのホスト名またはIP>>/
このようにSimpleSAMLphpを使うと簡単にSAML対応のWebサイトを構築できます。
それではまた。