🥒
Apaceh mod_auth_openidc で OIDC RP を設定してみる
概要
Apaceh mod_auth_openidc で OIDC RP(Relying Party) を設定してみます。
OP(OpenID Provider) として KeyCloakを利用します。
参考
KeyCloak
環境構築
https://zenn.dev/mnod/articles/4faa7d4693765f と同様に、KeyCloak も Dockerコンテナで用意する。
設定
- 作成した Realm へ移動する
- 右ペインで
Manage
>Clients
へ移動する → 左ペインでCreate Client
を押下 - 以下を入力して作成する(その他の値は初期値のまま)
項目 | 設定値 |
---|---|
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 にメッセージを確認する。
Discussion