[サンプルアプリケーションでKeycloakのSSO動作を確認してみよう (1/3)]
(https://www.atmarkit.co.jp/ait/articles/1710/04/news008.html)
という記事を見つけたが、バージョンが「3.2.0.Final」である。
もっとお手軽にできないか探したのが
jboss/keycloak-examplesです。
Deprecated, see https://github.com/keycloak/keycloak-quickstarts for new QuickStarts.
と記載があります。QuickStarts面倒なんだよなっと思い、とりあえず動かしてみた。「4.5.0.Final」ベースのようであるが動かない。
C:\kazu\ex>docker run -it jboss/keycloak-examples
=========================================================================
JBoss Bootstrap Environment
JBOSS_HOME: /opt/jboss/keycloak-demo/keycloak
JAVA: /usr/lib/jvm/java/bin/java
JAVA_OPTS: -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true
=========================================================================
03:13:47,958 INFO [org.jboss.modules] (main) JBoss Modules version 1.8.5.Final
03:13:48,273 INFO [org.jboss.msc] (main) JBoss MSC version 1.4.2.Final
03:13:48,289 INFO [org.jboss.threads] (main) JBoss Threads version 2.3.2.Final
03:13:48,589 INFO [org.jboss.as] (MSC service thread 1-2) WFLYSRV0049: WildFly Full 13.0.0.Final (WildFly Core 5.0.0.Final) starting
03:13:49,799 ERROR [org.jboss.as.controller] (Controller Boot Thread)
OPVDX001: Validation error in standalone.xml -----------------------------------
|
| 32: <extension module="org.wildfly.extension.security.manager"/>
| 33: <extension module="org.wildfly.extension.undertow"/>
| 34: <extension module="org.keycloak.keycloak-server-subsystem" xmlns=""/>
| ^^^^ 'extension' can't appear more than once within the extensions element
|
| 35: <extension module="org.keycloak.keycloak-adapter-subsystem" xmlns=""/>
| 36: <extension module="org.keycloak.keycloak-saml-adapter-subsystem" xmlns=""/>
| 37: </extensions>
|
| A 'extension' element first appears here:
|
| 33: <extension module="org.wildfly.extension.undertow"/>
| 34: <extension module="org.keycloak.keycloak-server-subsystem" xmlns=""/>
| 35: <extension module="org.keycloak.keycloak-adapter-subsystem" xmlns=""/>
| ^^^^
|
| 36: <extension module="org.keycloak.keycloak-saml-adapter-subsystem" xmlns=""/>
| 37: </extensions>
| 38: <management>
|
| The primary underlying error message was:
| > ParseError at [row,col]:[34,9]
| > Message: WFLYCTL0198: Unexpected element 'extension' encountered
|
|-------------------------------------------------------------------------------
03:13:49,808 ERROR [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0055: Caught exception during boot: org.jboss.as.controller.persistence.ConfigurationPersistenceException: WFLYCTL0085: Failed to parse configuration
at org.jboss.as.controller.persistence.XmlConfigurationPersister.load(XmlConfigurationPersister.java:143)
at org.jboss.as.server.ServerService.boot(ServerService.java:377)
at org.jboss.as.controller.AbstractControllerService$1.run(AbstractControllerService.java:372)
at java.lang.Thread.run(Thread.java:748)
03:13:49,813 FATAL [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0056: Server boot has failed in an unrecoverable manner; exiting. See previous messages for details.
03:13:49,845 INFO [org.jboss.as] (MSC service thread 1-3) WFLYSRV0050: WildFly Full 13.0.0.Final (WildFly Core 5.0.0.Final) stopped in 23ms
C:\kazu\ex>
これはもう自分で Docker イメージを作るかなということで、historyからの再構築したDockerfileは↓です。多分、オリジナルのベースOSはredhatだと思うけど、そこはcentosで。
from centos
RUN yum update -y && yum -y install xmlstarlet saxon augeas bsdtar unzip && yum clean all
RUN groupadd -r jboss -g 1000 && useradd -u 1000 -r -g jboss -m -d /opt/jboss -s /sbin/nologin -c "JBoss user" jboss && chmod 755 /opt/jboss
WORKDIR /opt/jboss
RUN yum -y install java-1.8.0-openjdk-devel && yum clean all
USER jboss
ENV JAVA_HOME=/usr/lib/jvm/java
ENV KEYCLOAK_VERSION=4.5.0.Final
ENV JBOSS_HOME=/opt/jboss/keycloak-demo/keycloak
ENV MAVEN_VERSION=3.3.9
ENV LAUNCH_JBOSS_IN_BACKGROUND=1
USER root
RUN curl -fsSL https://archive.apache.org/dist/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz | tar xzf - -C /usr/share && mv /usr/share/apache-maven-$MAVEN_VERSION /usr/share/maven && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn
ENV MAVEN_HOME=/usr/share/maven
USER jboss
RUN cd /opt/jboss \
&& curl -s ttp://downloads.jboss.org/keycloak/$KEYCLOAK_VERSION/keycloak-demo-$KEYCLOAK_VERSION.zip -o tmp.zip \
&& unzip tmp.zip -d . \
&& mv /opt/jboss/keycloak-demo-$KEYCLOAK_VERSION /opt/jboss/keycloak-demo
RUN mvn package -f /opt/jboss/keycloak-demo/examples/preconfigured-demo/pom.xml \
&& rm -rf ~/.m2/repository
RUN cd /opt/jboss/keycloak-demo/examples/preconfigured-demo \
&& find -name *.war | grep -v ear | xargs -I {} cp {} /opt/jboss/keycloak-demo/keycloak/standalone/deployments/ \
&& cp /opt/jboss/keycloak-demo/examples/preconfigured-demo/testrealm.json /opt/jboss/keycloak-demo/keycloak/
ADD docker-entrypoint.sh /opt/jboss/
EXPOSE 8080 ENTRYPOINT ["/opt/jboss/docker-entrypoint.sh"]
CMD ["-b" "0.0.0.0" "-bmanagement" "0.0.0.0" "-Dkeycloak.import=/opt/jboss/keycloak-demo/keycloak/testrealm.json"]
CMD ["/bin/sh" "-c" "/bin/bash"]
docker-entrypoint.shを追加するので、それはこれです。
# !/usr/bin/env bash
if [ $KEYCLOAK_USER ] && [ $KEYCLOAK_PASSWORD ]; then
/opt/jboss/keycloak-demo/keycloak/bin/add-user-keycloak.sh -u $KEYCLOAK_USER -p $KEYCLOAK_PASSWORD >/dev/null
fi
exec /opt/jboss/keycloak-demo/keycloak/bin/standalone.sh $@
exit $?
ちょっと時間がないので、後でデバッグしよう。QuickStarts試せって(^^;
自分でDockerイメージ作って試したら、元々のものと同じエラーとなります。「6.0.1」のstandalone.xml見比べると以下の部分がいけていなそうです。
<extension module="org.keycloak.keycloak-server-subsystem" xmlns=""/>
⇒
<extension module="org.keycloak.keycloak-server-subsystem"/>
xmlns=""の部分を取った、standalone.xmlを用意し、以下のDockerfileでイメージを作成する。
from jboss/keycloak-examples
COPY standalone.xml /opt/jboss/keycloak-demo/keycloak/standalone/configuration
取り合えず、立ち上げ時のエラーは出なくなった(^^)/
その後、standalone.xmlを用意するのも面倒なので、sedで編集することとしました。
from jboss/keycloak-examples
RUN sed -i '34,36s/ xmlns=""//' /opt/jboss/keycloak-demo/keycloak/standalone/configuration/standalone.xml
作ったイメージを使って、起動してみる。
C:\kazu\ex>docker run -it -p 8080:8080 kazu:keycloak
=========================================================================
JBoss Bootstrap Environment
JBOSS_HOME: /opt/jboss/keycloak-demo/keycloak
JAVA: /usr/lib/jvm/java/bin/java
JAVA_OPTS: -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true
=========================================================================
13:44:18,432 INFO [org.jboss.modules] (main) JBoss Modules version 1.8.5.Final
13:44:22,139 INFO [org.jboss.msc] (main) JBoss MSC version 1.4.2.Final
13:44:22,251 INFO [org.jboss.threads] (main) JBoss Threads version 2.3.2.Final
13:44:23,181 INFO [org.jboss.as] (MSC service thread 1-2) WFLYSRV0049: WildFly Full 13.0.0.Final (WildFly Core 5.0.0.Final) starting
(省略)
13:46:22,237 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on http://0.0.0.0:9990
13:46:22,240 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 13.0.0.Final (WildFly Core 5.0.0.Final) started in 127673ms - Started 1301 of 1579 services (603 services are lazy, passive or on-demand)
うん、keycloakは動いているね。
authのURLにアクセスしたら以下のメッセージが出た。http://localhost:8080/auth
にアクセスしているんだけど。
You need local access to create the initial admin user.
Open http://localhost:8080/auth
or use the add-user-keycloak script.
adminユーザを登録しよう。
[jboss@6e22a58712f3 ~]$ /opt/jboss/keycloak-demo/keycloak/bin/add-user-keycloak.sh --user admin --password admin
Added 'admin' to '/opt/jboss/keycloak-demo/keycloak/standalone/configuration/keycloak-add-user.json', restart server to load user
また、demoプログラム用のユーザを登録しました。product-portalにアクセスしたけど、Bad Requestとなった。Windows 10だけど、homeとproで動き違う気がする(proではDocker for Windowsで、homeはDocker Toolboxです)。proでforbiddenなったが自分で作ったユーザにroleが無かっただけだった。homeもキャッシュをクリアしたら無事に動きました。