2019年7月22日月曜日

Docker で Keycloak に入門する

Keycloak の Getting Started Guide をやっていく。

前提

  • OS: Windows 10 Pro
  • Docker: Docker version 18.09.2, build 6247962
    • 使用イメージ: debian:buster-slim
  • Keycloak: 6.0.1

事前準備

コンテナ起動

docker run -it --rm -p "80:80" -p "8080:8080" -p "9080:9080" debian:buster-slim
  • 80: アプリケーションサーバーポート
  • 8080: keycloak ポート
  • 9080: アプリケーションサーバー管理用ポート

必要なパッケージを取得

apt-get update
apt-get upgrade -y
mkdir -p /usr/share/man/man1
apt-get install -y curl openjdk-11-jdk

※ openjdk は、 headless だとサンプルアプリのデプロイでエラーが発生するため、今回は普通のものをインストールする。

keycloak の準備

keycloak のインストール

ダウンロード

curl -L https://downloads.jboss.org/keycloak/6.0.1/keycloak-6.0.1.tar.gz -O

配置

tar xf ./keycloak-6.0.1.tar.gz -C /opt

初期設定

初期ユーザー作成

ユーザー mikoto を追加。

root@dd4775da3619:/# /opt/keycloak-6.0.1/bin/add-user-keycloak.sh -u mikoto
Press ctrl-d (Unix) or ctrl-z (Windows) to exit
Password:
Added 'mikoto' to '/opt/keycloak-6.0.1/standalone/configuration/keycloak-add-user.json', restart server to load user

すでに keycloak サーバーを起動してしまっている場合は、サーバーを再起動するとユーザーが有効になる。

keycloak の起動

/opt/keycloak-6.0.1/bin/standalone.sh -Djboss.bind.address=0.0.0.0 -Djboss.http.port:8080 -Djboss.https.port=8523 -Djboss.bind.address.management=0.0.0.0 -Djboss.management.http.port=9000 -Djboss.management.https.port=9443

各引数の意味はこんな感じ。

  • -Djboss.bind.address=0.0.0.0: keycloak の listen アドレス。今回は Docker を使っているので、どこからでもアクセスできるように 0.0.0.0 を設定。
  • -Djboss.http.port=8080, -Djboss.https.port=8523: keycloak 接続ポート
  • -Djboss.bind.address.management=0.0.0.0: keycloak が動いている WildFly の管理用ページ(?) の listen アドレス。今回は Docker を使っているので、どこからでもアクセスできるように 0.0.0.0 を設定。
  • -Djboss.management.http.port=8080, -Djboss.management.http.port=9443: keycloak が動いている WildFly の管理用ポート

その他、ポート番号はオフセットで指定することもできる。こっちのほうが楽そう。

  • -Djboss.socket.binding.port-offset=10000

Realm とユーザーの追加

http://localhost:8080 に接続し、 Realm とユーザーを追加する。

Realm の追加

  1. 左上の Master のドロップダウンを選択
  2. Add realm ボタン押下
  3. realm の設定を入力
    1. Name: demo
    2. Enabled: ON
    3. Create 押下
    4. 左上のドロップダウンが Demo に変わっているのを確認

Realm に対するユーザーの追加

  1. 左のサイドメニューの Users を選択
  2. Add user ボタン押下
  3. ユーザー情報の追加
    1. Username: demo_user
    2. User Enabled: ON
    3. Save 押下
  4. Credentials タブを選択
  5. パスワード設定
    1. New Password, Password Confirmation を設定
    2. Reset Password 押下
    3. Change password 押下

アプリケーションの準備

アプリケーション用 WildFly のインストール

WildFly のダウンロードと展開

curl -L https://download.jboss.org/wildfly/17.0.1.Final/wildfly-17.0.1.Final.tar.gz -O
tar xf wildfly-17.0.1.Final.tar.gz

WildFly OpenID Connect adapter のダウンロード・展開

curl -L https://downloads.jboss.org/keycloak/6.0.1/adapters/keycloak-oidc/keycloak-wildfly-adapter-dist-6.0.1.tar.gz -O
tar xf keycloak-wildfly-adapter-dist-6.0.1.tar.gz -C wildfly-17.0.1.Final

WildFly OpenID Connect adapter のインストール

cd ./wildfly-17.0.1.Final/bin
./jboss-cli.sh --file=adapter-install-offline.cli

WildFly の実行

./standalone.sh -Djboss.bind.address=0.0.0.0 -Djboss.http.port=80 -Djboss.https.port=443 -Djboss.bind.address.management=0.0.0.0 -Djboss.management.http.port=9080 -Djboss.management.https.port=9523

keycloak を利用するアプリケーションの準備

keycloak を利用する側のアプリを準備。 keycloak の quickstarts のアプリを使う。

ソース取得

apt-get install -y git maven
git clone https://github.com/keycloak/keycloak-quickstarts

ビルド・デプロイ

cd keycloak-quickstarts/app-profile-jee-vanilla
mvn clean wildfly:deploy -Dwildfly.port=9080 -Dmaven.compiler.target=11 -Dmaven.compiler.source=11

demo_user がまだ許可されていないことを確認

http://localhost/vanilla にアクセス。

LOGIN ボタンを押すと、 BASIC 認証ダイアログが表示される。demo_user のユーザー名・パスワードでログインできないことを確認。

アプリケーションと demo Realm の紐づけ

アプリケーションと demo Realm を紐づけて、 demo Realm の情報でログインできるようにする。

keycloak 側の設定

  1. demo realm -> Clients を選択
  2. Create 押下
  3. クライアント情報入力
    1. Client ID: vanilla
    2. Client Protocol: openid-connect
    3. Root URL: http://localhost/vanilla
    4. Save 押下
  4. Installation タブ選択
    1. Format Option: Keycloak OIDC JBoss Subsystem XML

アプリケーションサーバー側の設定

/wildfly-17.0.1.Final/standalone/configuration/standalone.xml を編集する。

<subsystem xmlns="urn:jboss:domain:keycloak:1.1"/> を探して、以下のように修正する。

<subsystem xmlns="urn:jboss:domain:keycloak:1.1">
    <secure-deployment name="vanilla.war">
        <realm>demo</realm>
        <auth-server-url>http://localhost:8080/auth</auth-server-url>
        <public-client>true</public-client>
        <ssl-required>EXTERNAL</ssl-required>
        <resource>vanilla</resource>
    </secure-deployment>
</subsystem>

アプリケーションサーバーを再起動すると、この設定が有効になる。

demo_user でログインできることを確認

http://localhost/vanilla にアクセス。

LOGIN ボタンを押すと、 keycloak のログイン画面が表示される。

demo_user のユーザー名・パスワードでログインできることを確認。 初回ログインなのでパスワードの更新を求められる。

ログインが完了すると、次のような画面が表示される。

以上。

アプリケーションサーバー管理用ポートを開けて、サンプルアプリケーションのビルド・デプロイはホスト側でやるというのもありですね。

参考資料

0 件のコメント:

コメントを投稿