前回の記事では、SimpleSAMLphpの概要とインストール方法について、ご紹介しました。
今回の記事では、SimpleSAMLphpを実際にIdP(アイデンティティ・プロバイダ)として、セットアップする方法をご紹介します。前回と同様、ローカル環境(XAMPP)での構築を前提としておりますので、予めご了承ください。
フェデレーション(連携)準備
前回ログインした管理画面のメニューから「連携」ボタンをクリックしてください。
デフォルトでは、未処理例外のエラー画面が表示されるかと思います。IdPとしてセットアップするのに必要な情報をPHPファイルにまだ書き込んでいないためです。
必要な手順は、以下の通りです。
config.php
// 538行目付近
- 'enable.saml20-idp' => false,
+ 'enable.saml20-idp' => true,
// 560行目付近(テスト用)
- 'exampleauth' => false,
+ 'exampleauth' => true,authsources.php
// 30行目付近
- 'entityID' => 'https://myapp.example.org/',
+ 'entityID' => 'https://localhost/IdP/public', /* ご自身の環境に合わせて変更してください */テスト用にexample-userpassのコメントを外します。コメントは、91行目と111行目付近にあります。
自己署名証明書(オレオレ証明書)の発行
以下のコマンドを実行し、自己署名証明書を発行します。OpenSSLがインストール済みであれば、XAMPPのShellから実行できると思います。
cd cert // certディレクトリに移動
openssl req -newkey rsa:3072 -new -x509 -days 3652 -nodes -out IdP.crt -keyout IdP.pemローカルでの運用なので、公式ドキュメントの例にならって有効期間を10年で設定しています。また、便宜上それぞれの名前を「IdP.crt」、「IdP.pem」にしていますが、任意の名前で構いません。
saml20-idp-hosted.php
// 9行目付近
- $metadata['urn:x-simplesamlphp:example-idp'] = [
+ $metadata['https://localhost/IdP/public'] = [
// 18行目付近
'privatekey' => 'IdP.pem', /* 先ほど発行した自己署名証明書の名前に合わせる */
'certificate' => 'IdP.crt',設定確認
ここで再度、管理画面の「連携」(フェデレーション)にアクセスしてみましょう。今度は正しく表示されるはずです。

上図のように、「Type: SAML2.0 IdP metadata」が表示されていたら成功です。このアコーディオンを展開すると、メタデータを確認することができます。
これで、SP(サービス・プロバイダ)にメタデータを引き渡す準備が整いました。
認証テスト
以上でIdPのセットアップは一旦終了ですが、せっかくexample-userpassを有効にしたので、この段階で一度認証テストを行いたいと思います。
管理画面のメニューから「Test」ボタンをクリックし、「example-userpass」を選びます。すると、ログインのテスト画面が出てきますので、config > authsources.phpに書かれているexample-userpassデータを使ってテストします。
デフォルトでは、以下の2ユーザが定義されています。
'users' => [
'student:studentpass' => [
'uid' => ['test'],
'eduPersonAffiliation' => ['member', 'student'],
],
'employee:employeepass' => [
'uid' => ['employee'],
'eduPersonAffiliation' => ['member', 'employee'],
],
],| ユーザ名 | パスワード |
| student | studentpass |
| employee | employeepass |
以下の画面が表示されたら、ログイン成功です。


