既存の独自アプリを変更せずSSOを実装する-2 SAML×Linux編

※この記事は私が以前に投稿した「既存の独自アプリを変更せず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は文の後半に記載されています。

まとめ

実施した内容の概要を整理して終わりにしたいと思います。

  1. ApacheのSAML対応モジュール「mod_auth_mellon」をインストール
  2. SPのメタデータを生成
  3. Entra IDにてアプリを登録しSPのメタデータをアップロード
  4. Entra IDにてIdPのメタデータをダウンロードし、Apacheサーバーに配置
  5. Apacheの設定ファイルでSAML認証の有効化とメタデータの配置場所を記載
  6. 構成チェックとサービス再起動を行った後にSSO動作テストを実施

参考情報


  1. 配置場所は任意となります
  2. 本記事ではEdgeのDevToolsを使用します
執筆担当者プロフィール
吉田 直人

吉田 直人(日本ビジネスシステムズ株式会社)

クラウドソリューション事業本部所属。家族とゲームとお酒を生きがいにしています。技術以外ではダイエットの資格も所持。

担当記事一覧