2026.2.11時点の情報です。
目的
SAML認証について、IdpとSPとのやりとりを理解したいと思い、ローカルPC上に確認できる環境を実際に構築してみた。
ローカルで動作検証することだけを目的として、手順を整理した。
構成
以下で構築してみた。
| # |
OS |
項目 |
ソフトウェア |
補足 |
| 1 |
Windows11 |
ブラウザ |
Microsoft Edge |
ローカルPC |
|
|
VM |
VirtualBox |
AlmaLinux9をゲストOSとして起動する |
| 2 |
AlmaLinux9 |
IdP(Identity Provider) |
Keycloak 26.5.1 |
dockerのコンテナ(name=keycloak)で起動 |
| 3 |
|
SP(Service Provider) |
Apache 2.4.52 + mod_auth_mellon 0.18.0-1ubuntu0.1 |
dockerのコンテナ(name=sp)で起動 |
実施前の環境状態
Windows上にVirtualBoxをインストールして、VirtualBox上にゲストOSとしてAlamLinux9を構築済。
さらにAImaLinux上でdockerが利用できる状態。
AlmaLinuxのプライベートIPアドレスは192.168.56.101
docker versionの状態は以下。

構築手順
1.ldpの構築
(1) AlmaLinux上で、Idpを以下で起動。パスワードはローカル検証用としてadminとする。
docker run -d \
--name keycloak \
-p 8080:8080 \
-e KEYCLOAK_ADMIN=admin \
-e KEYCLOAK_ADMIN_PASSWORD=admin \
quay.io/keycloak/keycloak:latest \
start-dev
(2) Windowsブラウザで管理画面の確認
URLはローカル環境のアドレスです。
http://192.168.56.101:8080
ユーザ名: admin
パスワード: admin
ログイン画面

ログイン後画面

2.IdpとSPの連携準備
(1) AlmaLinuxにて、/root/docker/mellonディレクトリを作成し、作成したディレクトリで以下を実行。
■ メタデータ作成コマンドを実行するため、以下でmod_auth_mellonをインストール
sudo dnf install mod_auth_mellon
■メタデータ作成コマンド
/usr/libexec/mod_auth_mellon/mellon_create_metadata.sh \
https://192.168.56.101:8443/mellon \
https://192.168.56.101:8443/mellon
■ 確認コマンド。cert、key、xmlの3ファイル作成されていることを確認。
ls

(2) https_192.168.56.101_8443_mellon.xmlファイルをWindows上の適当なフォルダにSCPなどでコピーする。(後述するIdp管理画面からインポートするため)
IdP側へのSP登録
(1) 「1.ldpの構築」の(2)でログインした管理画面で、Managed realmsをクリック

(2) 「Create realm」をクリック

(3) 「Realm name」を適当に入力する。今回は「mellon」として「create」をクリック

(4) 作成した「mellon」が表示され、「Current realm」の表示があることを確認する

(5) Clients をクリックして 「Import Client」クリック

(6) 「Browse...」を押して、メタデータファイル(https_192.168.56.101_8443_mellon.xml)を選択する。
選択後自動的に値が入力されたことを確認して、「Save」をクリック

(7) 設定された情報が表示されることを確認

(8) 右上の「Action」をクリックして、「Download adapter config」をクリック

(9) ウィンドウが表示されるので、そのまま「Download」をクリック

keycloak-mod-auth-mellon-sp-config.zipファイルがWindows上にダウンロードされる。
(10) zipファイルを展開すると以下3ファイルが作成される。
- client-cert.pem
- idp-metadata.xml SP側設定時に必要なのはこのファイルのみ
- sp-metadata.xml
sp側に必要なidp-metadata.xmlファイルをAlmaLinuxの/root/docker/mellon配下へ配置する。
(11) KeyCloakの画面の「Keys」タブをクリック

(12) 「Encryption keys config」の「Encrypt assertions」をOFF(無効)1にする。

無効にするか確認が表示されるので、Yesをクリック

OFFの表示となったことを確認する

(13) ブラウザからのログイン用ユーザーを登録するため、左のツリーの「Users」を選択し、「create new user」をクリック

(14) 任意の情報を入力する。ここではtestuserとする。
他の情報も入力して2 「Create」をクリック

(15) 作成されたユーザー名が表示されたことを確認して、パスワードを設定するために「Credentials」をクリック

(16) 「Set password」をクリック

(17) 設定する任意のパスワード入力し、TemporaryをOffにする3 。 入力したら「Save」をクリック

(18) 保存するか確認が表示されるので、「Save password」をクリック

(19) パスワードの行が表示されたことを確認する

3.SPの構築
SP側へのIdP登録
(1) AlmaLinux上で、/root/docker/sites-enabled/mellon.confファイルを以下内容で作成する。(コンテナSPのhttpd用定義)
<VirtualHost *:443>
ServerName 192.168.56.101
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
<Location / >
MellonSPPrivateKeyFile /etc/apache2/mellon/https_192.168.56.101_8443_mellon.key
MellonSPCertFile /etc/apache2/mellon/https_192.168.56.101_8443_mellon.cert
MellonSPMetadataFile /etc/apache2/mellon/https_192.168.56.101_8443_mellon.xml
MellonIdPMetadataFile /etc/apache2/mellon/idp-metadata.xml
MellonEndpointPath /mellon
MellonSecureCookie On
MellonCookieSameSite None
</Location>
<Location /mellon>
MellonEnable "info"
</Location>
<Location /protected>
AuthType Mellon
MellonEnable "auth"
Require valid-user
</Location>
</VirtualHost>
(2) SPを起動するためのDockerFileを以下内容で作成する。場所は/root/docker/Dockerfile
FROM ubuntu:22.04
RUN apt-get update && \
apt-get install -y apache2 libapache2-mod-auth-mellon openssl && \
a2enmod auth_mellon && \
a2enmod ssl
# SSL 証明書(HTTPS 用)
RUN mkdir -p /etc/apache2/ssl && \
openssl req -new -x509 -days 365 -nodes \
-out /etc/apache2/ssl/server.crt \
-keyout /etc/apache2/ssl/server.key \
-subj "/C=JP/ST=Tokyo/L=Tokyo/O=Example/OU=oreore/CN=192.168.56.101"
# protected ディレクトリと テスト用HTML を作成
RUN mkdir -p /var/www/html/protected/other && \
echo '<html><body><h1>SAML SUCCESS!</h1><a href="/protected/other/">Go to OTHER</a></body></html>' \
> /var/www/html/protected/index.html && \
echo '<html><body><h1>OTHER PROTECT DIR</h1><a href="/protected/">Back to PROTECTED</a></body></html>' \
> /var/www/html/protected/other/index.html
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
(2) /root/dockerディレクトリで、以下ビルド実行する。
docker build -t mellon-sp .
(3) 以下コマンドを実行しSPを起動する。-vで、AlmaLinux上のmellonディレクトリ、mellon.confファイルをコンテナ(sp)から参照する
docker run -d \
--name sp \
-p 8443:443 \
-v /root/docker/mellon:/etc/apache2/mellon \
-v /root/docker/sites-enabled/mellon.conf:/etc/apache2/sites-enabled/mellon.conf \
mellon-sp
(4) AlmaLinux上で、以下コマンドでSPのコンテナが起動していることを確認する
docker ps
※ NAMESが「sp」の情報が表示されたら成功。

4.確認
(1) Windowsのブラウザから以下URLにアクセスする。
※ローカル環境のリンクURLです。
https://192.168.56.101:8443/
保護対象外のパスのため、認証なしでhttpdデフォルトのページ内容が表示される。

(2) 保護してるパスにアクセスする。
※ローカル環境のリンクURLです。
https://192.168.56.101:8443/protected
保護対象のため、リダイレクトされてIdpのKeyCloakのログイン画面が表示されるので、ユーザーとパスワードを入力してsign inをクリック

(3) テスト用HTMLの内容であるSUCCESS画面が表示された!

以上です。