OpenID Connect の Web 認証サーバ keycloak の検証していて不可解なバグに当たったので、同じ問題で苦労する人がいるかもしれないと思い、ここに書いておくことにしました。
現象
Keycloak の admin コンソールで構築作業を実施していると、いつのまにか ユーザ admin/パスワード admin でログインしようとしても Invalid username or password. のエラーでログインできなくなってしまいました。
再現手順
以下の手順で再現します。
まず、 docker で keycloak を起動してください。
docker run -it --rm -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:latest start-dev
次にブラウザで管理画面 http://localhost:8080 を開いて以下を実行します。
- admin/admin でログインする
- Relm "test" を新規作成する
- サイドバー 「Relm Settings」->「Login」 タブを開く
- 「Email settings」の「Email as username」をオン
- サイドバー 「Relm Settings」->「Email」タブを開く
- 一番下の
To test the connection you must first configure an e-mail address for the current user (admin).
の下にある「Configure e-mail address」のリンクをクリックする - 開いた画面の Email フィールドに自分のメールアドレスを入れて「Save」をクリックする
- 右上の admin をクリックして「Sign out」でログアウトする
- admin/admin でログインしようとしても Invalid username or password. でログインできない
わかってしまえば簡単かもしれませんが、構築検証している中で、いつ admin/admin でログインできなくなったのかも分からず、かなりの長い時間悩んでいました。
調べた結果 7. の操作で意図せず maste レルムの admin ユーザの username を自分のメールアドレスに変更してしまっていたということがわかりました。
しかし、トリッキーな点が二点あって
- 手順7.で開いた画面で master レルムのユーザを編集していることが分からない(URLを見ると testレルムのユーザを編集しているように見えるし、パンくずの Users をクリックすると test レルムの空っぽのユーザリストが見える)
- Email as username をオンにしたのは test レルムであり、masterレルムの Email as username はオフのままであるのに master レルムの email アドレスを入れて usernameが変わってしまうのはおかしい。(実際に master レルムに移ってから admin のメールアドレスを設定しても username は変わらず、admin/admin でログインすることはでき、7.の Email の接続テストも成功する)
長い時間悩んだので同じ罠にかかる人が少しでも減るようにここに記載しておきます。Keycloak 本家は issue も PR も大量に滞留しているようで投稿するのがためらわれますが、時間ができたら issue を投稿しようと思います。