極北別世界通信

シングルサインオン

ようやくKeycloakでのシングルサインオンに手を付けた。

とはいえインターネット経由で使えるようにするとなるとまたSSLの設定やらなんやら必要ですし中々面倒ですな。

まぁ構築後の面倒をさけるための構築なんだからしょうがないんですが。

ちなみにKeyCloakは、単にテスト用程度に構築する分には実はそれほど難しくありません。

JDKのインストール

# yum update -y
# yum install java-1.8.0-openjdk

keycloakのインストール

# cd /opt
# sudo wget https://downloads.jboss.org/keycloak/11.0.2/keycloak-11.0.2.tar.gz
# tar xfpz keycloak-11.0.2.tar.gz
# mv keycloak-11.0.2 keycloak

Keycloakの設定

構築内容や状況によってはほかにもいろいろ必要だが、下記はおそらく絶対必要な対応ではないかと。

# vi /opt/keycloak/standalone/configuration/standalone.xml

<interfaces>
<interface name="management">
<inet-address value="${jboss.bind.address.management:[KeycloakサーバーのIP]}"/>
</interface>
<interface name="public">
<inet-address value="${jboss.bind.address:[KeycloakサーバーのIP]}"/>
</interface>
</interfaces>

なお、実際の構築時にはいつも通りリバースプロキシを通すのでSSL化のために下記の太字部分を書き換えている

<subsystem xmlns="urn:jboss:domain:undertow:7.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other">
<buffer-cache name="default"/>
<server name="default-server">
- <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
+ <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true" proxy-address-forwarding="true"/>
<https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/>
<host name="default-host" alias="localhost">
<location name="/" handler="welcome-content"/>
<http-invoker security-realm="ApplicationRealm"/>
</host>
</server>

起動設定のためにサービスとして登録

# sudo vi /etc/systemd/system/keycloak.service

[Unit]
Description=Jboss Application Server
After=network.target
[Service]
Type=idle
Environment=JBOSS_HOME=/opt/keycloak
JBOSS_LOG_DIR=/var/log/keycloak/ "JAVA_OPTS=-Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true"
User=root
Group=root
ExecStart=/opt/keycloak/bin/standalone.sh -Djboss.http.port=80 -b 0.0.0.0
TimeoutStartSec=600
TimeoutStopSec=600
[Install]
WantedBy=multi-user.target

設定ファイルを再読み込みし、サービスとして登録、起動します。

# systemctl daemon-reload
# systemctl enable keycloak
# systemctl start keycloak

Keycloakでは管理者をあらかじめ登録しないとアクセスできませんので、管理ユーザーをコンソールから登録します。
ユーザー名とパスワードは任意のものを設定してください。

# /opt/keycloak/bin/add-user-keycloak.sh -r master -u 【ユーザー名】 -p 【パスワード】

これで一応構築は完了です。

ログインしての設定等はまた別途。