yamaday0u Blog Written by yamaday0u

【Keycloak 26.0.0】ユーザーセッションが永続化されたので試してみた!

SSO

こんにちは、やまだゆうです。

大好きなKeycloakに革命的な機能改善が実装されたので、ご紹介します!

これまでキャッシュ(infinispan)にしか保存されなかったユーザーセッションが、データベースに保存されるようになりました。

これにより以下の場面でログイン状態が維持できるようになりました。

  • すべてのKeycloakインスタンスを再起動したとき
  • Keycloakをアップグレードするとき
Keycloakは実務でも使っていて、アップグレード作業をやったことがあるのですがユーザーセッションが切れてしまうのが社内でも非常に問題視されていました。

バージョン25でプレビュー機能として実装されて、バージョン26でデフォルト有効化されるようになりました。

スポンサーリンク

 セッションが永続化されていることを確認してみよう

こちらの議論に記載されているようにoffline_user_sessionテーブルにoffline_flag=0でデータが保存されていれば、ユーザーセッションがデータベースに保存されていることになります。

offline_user_sessionテーブルにoffline_flag=0で保存されていればオンラインセッションがDBに保存されているとのこと。

今回はこのユーザーセッションの永続化機能を実際に検証してみます。

具体的には、Keycloakでユーザーを作成してログインし、その後Keycloakのコンテナを再起動してもセッションが維持されているかを確認します。

これによって、運用環境でのメンテナンスやアップグレード時にユーザーエクスペリエンスがどう改善されるかを見ていきましょう。

Keycloak v26を実行する

以下のcompose.ymlを使います。ぼくのGithubで公開していますので、ご利用ください!

services:
  mysql:
    image: mysql:8.0.42
    container_name: keycloak-v26-mysql
    volumes:
      - keycloak-mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: keycloak
      MYSQL_USER: db-user
      MYSQL_PASSWORD: password
    ports:
      - 3306:3306
    healthcheck:
      test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost", "-u$${MYSQL_USER}", "-p$${MYSQL_PASSWORD}"]
      interval: 10s
      timeout: 5s

  keycloak:
    image: keycloak/keycloak:26.3.1
    container_name: keycloak-v26
    ports:
      - 4000:8080
    environment:
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: password
      KC_HTTP_RELATIVE_PATH: /auth
      KC_DB: mysql
      KC_DB_URL_HOST: mysql
      KC_DB_URL_DATABASE: keycloak
      KC_DB_USERNAME: db-user
      KC_DB_PASSWORD: password
      TZ: Asia/Tokyo
    command: start-dev
    depends_on:
      mysql:
        condition: service_healthy

volumes:
  keycloak-mysql-data:
    external: true

networks:
  default:
    name: keycloak-network
    external: true

リポジトリのREADMEにも記載しているとおり、事前にボリュームとネットワークを作ります。

docker volume create keycloak-mysql-data
docker network create keycloak-network

docker composeを実行します。

docker compose up

スポンサーリンク

adminユーザーでログインする

起動したKeycloakにadminユーザーでログインします。

ぼくのGithubリポジトリからKeycloakを起動している場合は、http://localhost:4000/auth からコンソールにアクセスできます。

adminユーザーでログイン後、MySQL Workbenchなどで以下のクエリを実行してセッションが保存されているか確認します。

SELECT * FROM keycloak.OFFLINE_USER_SESSION;

確認できたらDockerコンテナを終了して、もう一度起動しましょう。

再び http://localhost:4000/auth にアクセスして、ログイン画面を経由せずにコンソールに入れたら永続化されていることの確認が完了です!

yamaday0uを応援お願いします!あなたの1クリックが励みになります。
>> にほんブログ村