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サイトを構築できます。
それではまた。






