Azure ADをIdPにしたSAMLのSPを構築してみた
SAMLを利用したSSO認証の検証をやってみたので残しておきます。
SAMLのSPを作るために、 one-login/php-saml のdemoサイトを利用しました。
PHPでは SimpleSAMLphp での構築方法がいくつかネットに載っておりますが、 php-saml
での情報がほぼなかったのでチョイスしました。
前提条件
- Azure ADを用意すること
AzureADへのユーザ登録も忘れずに。 - Webサーバを構築しておくこと
今回は nginx & php-fpm環境としてます。
Docker & ngrokで一時的に公開しやってみたのですが、うまくできなかったので、仮想サーバ上で立てました。 - PHP実行環境 今回は7.4で試してます。
- one-login/php-samlをダウンロードする
手順
php-samlをダウンロードする
Webサーバの公開ディレクトリ配下にダウンロードします。
今回はgit clone
しました。
SPの設定を行う
demo1/settings_example.php
をコピーしdemo1/settings.php
として作成し以下の通り登録します。
idp
の配下の要素は一旦空のままで。後程Azure ADで取得した値で埋めます。
<?php $spBaseUrl = 'https://hoge.com/php-saml'; //任意のドメインに $settingsInfo = array ( 'sp' => array ( 'entityId' => $spBaseUrl.'/demo1/metadata.php', 'assertionConsumerService' => array ( 'url' => $spBaseUrl.'/demo1/index.php?acs', ), 'singleLogoutService' => array ( 'url' => $spBaseUrl.'/demo1/index.php?sls', ), 'NameIDFormat' => 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress', ), 'idp' => array ( 'entityId' => '', 'singleSignOnService' => array ( 'url' => '', ), 'singleLogoutService' => array ( 'url' => '', ), 'x509cert' => '', ), );
Azure ADにカスタムアプリケーションを登録する
- Azure Portalから
Azure Active Direcotry
を検索し、エンタープライズアプリケーションの画面に遷移します。Portal画面 +独自のアプリケーションの作成
から任意のアプリケーションを登録します。独自のアプリケーションの作成
SAML構成を行う
作成が完了するとエンタープライズアプリケーションのページに遷移するので、
シングルサインオン
からSAML
のペインをクリックします。demo エンティティIDと応答URLをそれぞれ登録します。
- エンティティID
https://hoge.com/php-saml/demo1/metadata.php
- 応答URL
https://hoge.com/php-saml/demo1/index.php/?acs
基本的なSAML構成
- エンティティID
登録後、SAML署名証明書から
フェデレーション メタデータ XML
をダウンロードします。 ダウンロード完了したら、エディタで開き、<X509Certificate>
タグで囲まれた文字列をコピーし、前述のSPの設定を行う
で作成したsettings.php
のx509cert
の欄にペーストします。完了後、 Azure Potalに戻り
demoのセットアップ
に表示されている文字列をsettings.php
にコピペします。demoのセットアップ - ログイン URL
singleLogoutService
のurl
- Azure AD 識別子
entityId
のurl
- ログアウト URL
singleLogoutService
のurl
- ログイン URL
ユーザ登録を行う
このままでは誰一人、デモサイトを利用できるユーザがいないので、ユーザ登録を行います。
エンタープライズ アプリケーションのページから ユーザとグループ
ブレードを開き、 +ユーザまたははグループの追加
をクリックし、Azure ADに既に登録されいているユーザの中から利用させたいユーザを登録します。
動作確認
デモサイトにアクセスし、Loginをクリックします。
Microsoft Login画面が開くので、ここでメールアドレスとパスワード、必要に応じて二要素認証対応を行います。
認証が無事に完了すると、以下の通り、SAMLレスポンスで受け取った値を一覧で確認できます。
おわりに
構築するのに非常に苦労したのですが、いざ出来上がるとそんなに複雑ではなかったです。
これを利用すると例えば自社内で利用する独自のアプリケーション(wikiだったり、ポータルサイトなど)をAzure ADと連携させて認証させることで堅牢なシステムを作ることができそうですね。