※この記事は私が以前に投稿した「既存の独自アプリを変更せずSSOを実装する-1 SAML基本編」の続きの記事となります。
今回は、Linux上で動作するWebアプリに対して、実際にEntra IDとSAMLを使ったSSOの実装を行ってみます。
SAMLの実装は、Apacheに対応したSAMLモジュールとなる「Apache Mellon」を使用します。
前提条件
事前に、以下の条件が満たされている前提とします。
- WebアプリはApacheがホストしている
- SSH接続が構成済みである
- OSはCentOS 7.9を使用
なお、WebアプリはシンプルなHTMLページで代用します。SSOを経て以下の画面が表示される事をゴールとします。
実装
SSO用モジュールのインストール~Apache Mellon構成
1.以下のコマンドにて、Apache Mellonのモジュール「mod_auth_mellon」をインストールします。
yum install mod_auth_mellon
インストール途中で以下の画面が表示された場合は「y」を入力します。
成功すると「Complete!」が表示されます。
2.IdPとSPの情報を扱うメタデータの配置場所を作成します。1
cd /etc/httpd/ mkdir mellon
3.メタデータ作成のためのスクリプトをダウンロードします。
cd /usr/local/bin curl -O https://raw.githubusercontent.com/latchset/mod_auth_mellon/main/mellon_create_metadata.sh chmod 755 /usr/local/bin/mellon_create_metadata.sh
4.スクリプトを実行してメタデータを作成します。ここでは2つのアドレスを入力する事になりますが、これらはSP側のEntityIDとエンドポイントURL(IdPからの情報を受け取る場所)を設定します。
./mellon_create_metadata.sh \ https://apache-test/ \ https://apache-test/saml
5.作成したファイルをmellonに移動します。
6.移動したファイルのうち.xmlファイルについてはEntra IDにインポートするためダウンロードします。
Entra IDにてアプリの登録~SSO設定
1.Entra IDの管理センターに接続し、「アプリケーション」>「エンタープライズアプリケーション」>「新しいアプリケーション」>「独自のアプリケーションの作成」に進み、アプリケーション名を設定して「作成」をクリックします。
2.作成されたアプリの「シングル サインオン」>「SAML」に進み、「メタデータ ファイルをアップロードする」から先程ダウンロードしたxmlファイルを指定して「追加」をクリックします。
3.「識別子(エンティティ ID)」と「応答 URL (Assertion Consumer Service URL)」の値が入力された事を確認し「保存」をクリックします。
保存後「×」で画面を抜けると以下の画面が表示されますが、「いいえ、後でtestします」をクリックします。
4.戻った画面を下にスクロールすると「SAML証明書」の項目がありますので、そこから「フェデレーション メタデータ XML」の「ダウンロード」をクリックします。
※ 先程Apacheで取得してEntra IDにアップデートしたのはSPのメタデータであり、こちらのファイルはIdPのメタデータとなります。これらのメタデータを互いに持ち合い情報連携を行うと考えるとイメージしやすいです。
5.取得したメタデータを、Apacheサーバーのmellonディレクトリに配置します。
Apache 設定ファイルの編集
1.Apacheの設定ファイルにApache Mellonの構成を追記します。編集対象となる設定ファイルはSSOを実装させたいアプリや要件に合わせて変更ください。
追記内容
#SAML認証を有効化する Require valid-user AuthType "Mellon" MelonEnable "auth" #Apache MellonのEndpointのパスを指定する MellonEndpointPath "/saml/" #SPのメタデータ情報 MellonSPMetadataFile /etc/httpd/mellon/https_apache_test_.xml MellonSPPrivateKeyFile /etc/httpd/mellon/https_apache_test_.key MellonSPCertFile /etc/httpd/mellon/https_apache_test_.cert #IdPのメタデータ情報 MellonIDPMetadataFile /etc/httpd/mellon/Test_Apache_Mellon_01.xml
実際の編集例は以下となります。
※ 構成の詳細については文末の参考情報をご参照ください。
2.編集が完了したら構成チェックとApacheサービスの再起動を行います。
apachectl configtest
systemctl restart httpd
動作確認
1.ブラウザからアプリに接続し、SSOが機能するかどうかを確認します。認証局を使用しない自己署名証明書を使用している場合は、以下の様な警告が表示されますが続行します。
2.認証画面が表示されますので認証情報を入力します。 3.無事にWebページが表示されました。
4.EntraID側では、認証が行われたタイミングで「成功」と「中断」のログが2件表示されます。
Assertionの確認
1.SAMLのAssertionとしては、Webページ表示の際にブラウザのデバッグを行う事で確認できます。ChromeとEdgeにはF12で呼び出せるDevToolsでデバッグを実行できますので、今回はこれを利用します。2
2.右上の方にある「ネットワーク」をクリックしてからSSOを実行していきます。
ページを読み込んでいくと、DevTools側でブラウザの処理内容が表示されていきます。最終的に「postResponse」という項目が表示されますので、クリックします。
3.クリック後、「ペイロード」をクリックするとAssertionの中身が取得できます。ただし、この値はBase64形式でエンコードされていますので、値をデコードする必要があります。なお、値は右クリックでクリップボードにコピーできます。
4.Assertionの値をデコードします。デコードの方法としてお手軽なのはMicrosoft Storeから取得できる「DevToys」を利用する方法です。 ツールをインストール後、Base64(テキスト)を選択しデコード状態で貼り付けをクリックするだけで、瞬時にデコードしてくれます。Assertionは文の後半に記載されています。
まとめ
実施した内容の概要を整理して終わりにしたいと思います。
- ApacheのSAML対応モジュール「mod_auth_mellon」をインストール
- SPのメタデータを生成
- Entra IDにてアプリを登録しSPのメタデータをアップロード
- Entra IDにてIdPのメタデータをダウンロードし、Apacheサーバーに配置
- Apacheの設定ファイルでSAML認証の有効化とメタデータの配置場所を記載
- 構成チェックとサービス再起動を行った後にSSO動作テストを実施
参考情報
- mod_auth_mellon User Guide
- GitHub - latchset/mod_auth_mellon: An Apache module with a simple SAML 2.0 service provider