PR

SimpleSAMLphp 入門(IdPセットアップ編)

SimpleSAMLphpテスト認証画面 セキュリティ
記事内に広告が含まれています。
スポンサーリンク

 前回の記事では、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'],
            ],
        ],
ユーザ名パスワード
studentstudentpass
employeeemployeepass

以下の画面が表示されたら、ログイン成功です。

スポンサーリンク
スポンサーリンク
セキュリティ
シェアする
しばをフォローする
タイトルとURLをコピーしました