🥒

Apaceh mod_auth_openidc で OIDC RP を設定してみる

2025/01/01に公開

概要

Apaceh mod_auth_openidc で OIDC RP(Relying Party) を設定してみます。
OP(OpenID Provider) として KeyCloakを利用します。

参考

https://github.com/OpenIDC/mod_auth_openidc/wiki/Keycloak

KeyCloak

環境構築

https://zenn.dev/mnod/articles/4faa7d4693765f と同様に、KeyCloak も Dockerコンテナで用意する。

設定

  1. 作成した Realm へ移動する
  2. 右ペインで Manage > Clients へ移動する → 左ペインで Create Client を押下
  3. 以下を入力して作成する(その他の値は初期値のまま)
項目 設定値
Client Type OpenID Connect
Client ID 任意の値
Name 任意の値
Client authentication On
Valid redirect URIs https://192.168.11.40/callback

Credentials タブに移動して Client Secret を控える

Apaceh mod_auth_openidc で OIDC を設定

環境構築

Docker コンテナを利用して Apache 環境を構築します。

sudo docker run --rm -it -p 443:443 -v /home/debian/docker/mellontest:/opt --name mellontest debian:bookworm-slim bash

パッケージのインストール

起動したコンテナ内で、必要なパッケージをインストールします。

# apt update
# apt install --no-install-recommends apache2 libapache2-mod-auth-openidc openssl ca-certificates

TLS接続するための証明書を作成

# openssl req -newkey rsa:3072 -new -x509 -days 3652 -nodes -out /etc/ssl/certs/mywebserver.pem -keyout /etc/ssl/private/mywebserver.key -subj '/C=JP/ST=Tokyo/L=Shinjuku/CN=192.168.11.40'

Apache の設定ファイルを作成

/etc/apache2/sites-available/mywebserver.conf
ServerName 192.168.11.40
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
DocumentRoot /var/www/html
ServerSignature Off
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined
LogLevel info ssl:warn

SSLEngine on
SSLCertificateFile /etc/ssl/certs/mywebserver.pem
SSLCertificateKeyFile /etc/ssl/private/mywebserver.key
</VirtualHost>

<Location />
Require valid-user
AuthType "Mellon"
OIDCProviderMetadataURL https://<KeyCloakのURL>/auth/realms/<レルム名>/.well-known/openid-configuration
OIDCClientID <KeyCloak で設定した Client ID>
OIDCClientSecret <KeyCloak で控えた Client Secret>
OIDCRedirectURI https://<ApacheのURL>/callback
OIDCCryptoPassphrase my-secret-passphrase
</Location>
</IfModule>

コンテンツ配置

mkdir -p /var/www/html/protected
date > /var/www/html/protected/index.html

設定有効化

apache2ctl configtest
a2enmod ssl
a2ensite mywebserver.conf
apachectl graceful

その他

KeyCloak のHTTPS証明書が自己署名のものなので、これを信頼する必要がある。
(信頼されない証明書だったり、CNが異なってたりするとエラーになる)

# cp /opt/example.crt /usr/local/share/ca-certificates/keycloak.crt
# update-ca-certificates

動作確認

WebサーバのURLにアクセスして、KeyCloakのログイン画面に遷移するること、ログインできること、コンテンツを表示できることを確認する。
Internal Server Error や Bad Requestのエラーがでたら、Apache の error.log にメッセージを確認する。

GitHubで編集を提案

Discussion