技術資料

Microsoft Entra IDとSimpleSAMLphpを利用したSAML認証SSO構築ガイド

作成日:2025.01.26

ローカル環境でMicrosoft Entra IDと連携したSAML認証のシングルサインオンを実現するための手順を紹介します。SimpleSAMLphpを利用した設定方法や、Microsoft側の構成変更について詳しく解説しています。

Microsoft Entra ID を IdP (Identity Provider) として利用した、 SAML認証による SSO(シングルサインオン) を、ローカル環境に設置した SimpleSAMLphp というPHPアプリケーションで実現する手順の解説です。

SimpleSAMLphp は、SAML認証のためのPHPアプリケーションで、 SP(Service Provider) としても、IdP としても動かすことができます。今回は、SimpleSAMLphp を SP として設定し、Microsoft Entra ID を IdP として利用します。

SimpleSAMLphp のダウンロードと展開

Downloads - SimpleSAMLphpから、SimpleSAMLphpのソースをダウンロードし、XAMPPのhtdocs内に展開します。

今回の例では、2025年1月25日現在の最新バージョン 2.3.5 を、 https://localhost/simplesamlphp/ に設置したと仮定して解説を進めます。

SimpleSAMLphp の導入と設定

SimpleSAMLphp を SP として利用するための設定を行ないます。

まずは、 config/config.php.dist をコピーして、 config/config.php を作成して、開きます。

baseurlpathを変更。

// 'baseurlpath' => 'simplesaml/',
'baseurlpath' => 'simplesamlphp/public/',

auth.adminpasswordを変更(デフォルトのままだとログインできません)。

// 'auth.adminpassword' => '123',
'auth.adminpassword' => 'hogehuga',

secretsaltを変更。

// 'secretsalt' => 'defaultsecretsalt',
'secretsalt' => '437shnynanpgxuzegzwuwck7buixrx7i',

続いて、 config/authsources.php.dist をコピーして config/authsources.php を作成して、開きます。

entityIDを変更。

// 'entityID' => 'https://myapp.example.org/',
'entityID' => 'https://localhost/simplesamlphp/public/module.php/saml/sp/metadata/default-sp',

SimpleSAMLphp の動作確認

これで最低限の設定はできたので、ブラウザで https://localhost/simplesamlphp/public/ にアクセスしてみます。

無事にWelcomeページが表示されればOkですが、私の環境では、Symfonyライブラリが足りなくて、以下のエラーが表示されました。

Caused by: Error: Interface "Symfony\Component\DependencyInjection\Extension\ConfigurationExtensionInterface" not found

ということで、コマンドプロンプトから Composer で足りないライブラリを追加していきます。
※Windows環境へのComposerのインストールに関しては、XAMPP環境にComposerをインストールする方法を参照。

まずは symfony/dependency-injection をインストール。

cd C:\xampp\htdocs\simplesamlphp

composer require symfony/dependency-injection --with-all-dependencies

※Composerでのライブラリインストールがタイムアウトする場合は、Composerのタイムアウト問題を解決する方法:設定変更でライブラリのダウンロードをスムーズにを参照。

インストールが終わって、改めてブラウザでアクセスしてみると、まだライブラリが足りないようで、以下のエラーが。

Caused by: Error: Class "Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AssetsContextPass" not found

ということで、続いて symfony/framework-bundle をインストール。

composer require symfony/framework-bundle

再度ブラウザでアクセスすると、引き続き別のエラー。

Caused by: Error: Class "Symfony\Component\HttpKernel\DependencyInjection\RegisterControllerArgumentLocatorsPass" not found

次は symfony/http-kernel をインストール。

composer require symfony/http-kernel

続いてのエラー。

Caused by: Error: Class "Symfony\Component\Routing\DependencyInjection\AddExpressionLanguageProvidersPass" not found

symfony/routing をインストール。

composer require symfony/routing

私の環境では、以上で足りないライブラリはインストール完了したようで、無事 https://localhost/simplesamlphp/public/ でウェルカムページが表示されました。

SimpleSAMLphp の管理画面にログイン

ブラウザで https://localhost/simplesamlphp/public/module.php/admin にアクセスすると、管理画面のログインフォームが表示されるので、先ほど config.php で設定した auth.adminpassword でログインします。

以下のような管理画面が表示されます。

一旦、SimpleSAMLphp の初期設定はこれで完了。続いて、Microsoft Entra ID 側の設定を行ないます。

Microsoft Entra ID 側での設定

Microsoft Entra 管理センターにログイン。

「アプリケーション」⇒「エンタープライズアプリケーション」を開き、「+新しいアプリケーション」をクリック。

「+独自のアプリケーションの作成」をクリックし、任意のアプリケーション名を入力(画像の例ではSimpleSAMLphp)。「ギャラリーに見つからないその他のアプリケーションを統合します (ギャラリー以外)」を選択して「作成」。

まずは、「ユーザーとグループの割り当て」から、SSOを許可したいユーザーを追加します。追加できるユーザーを増やしたい時は、一番左のサイドメニューの「ユーザー」から追加や招待が行なえます。

続いて「シングルサインオンの設定」へ進みます。

「SAML」を選択。

「1. 基本的な SAML 構成」の編集を行ないます。

以下の二項目を入力して「保存」。

識別子 (エンティティ ID)
https://localhost/simplesamlphp/public/module.php/saml/sp/metadata/default-sp
応答 URL (Assertion Consumer Service URL)
https://localhost/simplesamlphp/public/module.php/saml/sp/saml2-acs.php/default-sp

「3. SAML 証明書」の項目内の「フェデレーション メタデータ XML」をダウンロードしておきます。

SimpleSAMLphp にメタデータを登録

ここで再び、SimpleSAMLphp 側での作業に戻ります。

SimpleSAMLphp の管理画面から「連携」タブを開き、「XMLをSimpleSAMLphpメタデータに変換」へ進みます。

「or select a file:」の欄に、先ほど Microsoft Entra ID 側でダウンロードした「フェデレーション メタデータ XML」ファイルを指定し、「パース」を実行。

XMLメタデータが SimpleSAMLphp用に変換されるので、コピーしておきます。

metadata/saml20-idp-remote.php.dist をコピーして、metadata/saml20-idp-remote.php を作成し、開きます。

metadata/saml20-idp-remote.php の末尾に、先ほど変換したメタデータを貼り付けて保存。

<?php

/**
* SAML 2.0 remote IdP metadata for SimpleSAMLphp.
*
* Remember to remove the IdPs you don't use from this file.
*
* See: https://simplesamlphp.org/docs/stable/simplesamlphp-reference-idp-remote
*/
$metadata['https://sts.windows.net/[entityid_of_microsoft_entra_id]/'] = [
    'entityid' => 'https://sts.windows.net/[entityid_of_microsoft_entra_id]/',
    'contacts' => [],
    'metadata-set' => 'saml20-idp-remote',
    'SingleSignOnService' => [
        [
            'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
            'Location' => 'https://login.microsoftonline.com/[redirect_url_of_microsoft_entra_id]/saml2',
        ],
        [
            'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',
            'Location' => 'https://login.microsoftonline.com/[post_url_of_microsoft_entra_id]/saml2',
        ],
    ],
    'SingleLogoutService' => [
        [
            'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
            'Location' => 'https://login.microsoftonline.com/[loguot_url_of_microsoft_entra_id]/saml2',
        ],
    ],
    'ArtifactResolutionService' => [],
    'NameIDFormats' => [],
    'keys' => [
        [
            'encryption' => false,
            'signing' => true,
            'type' => 'X509Certificate',
            'X509Certificate' => '[ssl_certificate_key_string]',
        ],
    ],
];

これで設定は完了です。

SSOのテストを行なう

では、いよいよ Microsoft Entra ID と連携した SAML認証による SSO をテストしてみましょう。

SimpleSAMLphp の管理画面から「Test」タブを開き、「default-sp」に進みます。

Microsoft Entra ID の IdP が選択肢にあることを確認して「選択」。

マイクロソフトアカウントのログインページに飛び、ログインすると、SimpleSAMLphp に再びリダイレクトされ、以下のような画面が表示されれば、SSO成功です。

ついでに、SLO(シングルログアウト)も試してみましょう。上記画面の最下部に「ログアウト」ボタンがあるので、ここからログアウトを試してみて、マイクロソフトアカウントのログアウトページに飛び、ログアウトできれば成功です。

PHP 8.2対応で発生するCodeIgniter3の警告への対処方法

2025.01.30

PHP 8.2では動的プロパティの利用が非推奨となり、CodeIgniter3環境で警告が出る問題が発生します。本記事では、その警告を抑制するための一時的な方法を解説しています。

CodeIgniter PHP

SAML通信の確認に便利なChrome拡張機能の紹介

2025.01.28

SAML認証を行なうWebアプリケーションの開発では、IdPとSP間でやり取りされるデータを確認したい場面が多々あります。本記事では、そうした作業に役立つChrome拡張機能「SAML Message Decoder」と「SAML Chrome Panel」を紹介します。

Chrome拡張機能 SAML認証

Composerのタイムアウト問題を解決する方法:設定変更でライブラリのダウンロードをスムーズに

2025.01.25

Composerでライブラリのインストール中に発生するタイムアウトエラーに対処する方法を解説します。タイムアウト設定の変更手順を紹介し、スムーズなダウンロードを実現するためのポイントを整理しました。

Composer PHP

XAMPP環境でPHPを8.1から8.3にバージョンアップする手順と注意点

2025.01.22

XAMPP環境のPHPを8.3にアップデートする際の具体的な手順を解説します。また、curl関連のエラーとその解消方法についても触れています。

PHP XAMPP

阿部辰也へのお仕事の依頼・お問い合わせ

お名前 *必須
会社名
メールアドレス *必須
電話番号
URL
お問い合わせのきっかけ
お問い合わせの内容 *必須
個人情報の取り扱いについて *必須 プライバシーポリシーをご確認いただき、同意いただける場合は「同意する」にチェックをしてください。

keyboard_double_arrow_up
TOP