こんにちは。サイオステクノロジー技術部 武井です。
SAMLに対応したIdPをいじっていると、テスト用のSAML SPが欲しくなるときがあります。
そんなときサクッとSAML SP作れるのがSimpleSAMLphpです。SimpleSAMLphpによるSAML SPの作り方をここにメモっておきます。
PHPやApacheはインストールされていることを前提とします。
XMLのパーサーをインストールします。
# yum install php-xml
simplesamlphpを以下URLよりダウンロードします。
https://simplesamlphp.org/download
解凍します。
# tar xzvf simplesamlphp-1.14.5.tar.gz
とりあえず/var配下にコピーします。
# cp -r simplesamlphp-1.14.5 /var/simplesamlephp
SPの情報を設定します。/var/simplesamlphp/config/authsources.phpを以下のように修正します。
'default-sp' => array( 'saml:SP', 'RelayState' => 'https://sp.hogehoge.com/testsp.php', // これを追加 // The entity ID of this SP. // Can be NULL/unset, in which case an entity ID is generated based on the metadata URL. 'entityID' => 'https://sp.hogehoge.com/', // これをnullから変更 // The entity ID of the IdP this should SP should contact. // Can be NULL/unset, in which case the user will be shown a list of available IdPs. 'idp' => 'https://idp.hogehoge.net/', // これをnullから変更
RelayStateはIdPで認証後に遷移するSPのURLです。entiryIDはSPのエンティティIDです。idpはIdPのエンティティIDです。
IdPのメタデータを作成します。simplesamlphpでは管理画面にて、IdPのメタデータをsimplesamlphp用のメタデータ形式に変換してあげる必要があります。
管理画面にアクセスするための、管理画面のパスワードを設定します。/var/simplesamlphp/config/config.phpを以下のように変更します。
'auth.adminpassword' => 'XXXXXX', // 初期値123から他のパスワードに変更
次にsimplesamlphpの管理画面(以下URL参照)にアクセスします。
https://simplesamlphpのホスト名/simplesaml
「連携」をクリックします。
「XML を SimpleSAMLphpメタデータに変換」をクリックします。
以下のいずれかの方法でIdPのメタデータをアップロードして下さい。
– 「XMLメタデータ」の下のテキストボックスにIdPのメタデータを貼り付けて「パース」をクリックする
– 「ファイルを選択」をクリックして、IdPのメタデータを選択し、「パース」をクリックする
変換結果が上記のように表示されます。「saml20-idp-remote」に表示されている内容をコピーして下さい。
/var/simplesamlphp/metadata/saml20-idp-remote.phpの末尾に、先ほどコピーした内容を貼り付けて保存します。
以上でSPの設定は終了です。
次は、SPのアプリを作成します。ApacheのDocument Rootが/var/www/htmlとします。/var/www/html/sp.phpを以下の内容で作成します。
<?php require_once('/var/simplesamlphp/lib/_autoload.php'); $as = new SimpleSAML_Auth_Simple('default-sp'); $as->requireAuth(); echo("SPだよ"); ?>
Apacheの設定を変更します。/etc/httpsd/conf.d/simplesamlphp.confを以下の内容で作成します。
SetEnv SIMPLESAMLPHP_CONFIG_DIR /var/simplesamlphp/config Alias /simplesaml /var/simplesamlphp/www
設定変更後、Apacheを再起動します。
上記のSPにアクセスすると、IdPにリダイレクトされて、認証が通れば、RelayStateで設定したURLにリダイレクトされるはずです。