先日 keycloak に Duo security の 2FA を追加しました。
https://qiita.com/uturned0/items/8f45ce492ec59680f9f2
client=security-admin-console
にも適用したのでkeycloak admin consoleに入る時もduoが必要です。ただ、もしduoのサービスが障害で落ちていたら console に入れなくなるので、その時に Duo を無効化する方法を調べました。
prerequicites
Keycloak 22を使ってます。v19までのWildflyでは非対応なので、quarkusになってない人はupgradeしましょう。
参考 https://qiita.com/uturned0/items/e9256c48ccba6f588d79
How to update Authentication flow
方針として、admin consoleにかかってるauthentication flowをデフォルトに戻すことにします。そうすればid/pwだけでログインできるようになります。
keycloak serverにloginします。
cd /opt/keycloak/bin
./kcadm.sh config credentials --server http://localhost:8080 --realm master --user admin
admin のパスワードを入力します。
# security admin console の client id を探す
./kcadm.sh get clients -r master --fields id,clientId | grep -B1 security-admin-console
ADMIN_CLIENT=58333d37-3729-4256-a8e3-d1640903caa7
# 今のauthenticaton flowを確認する
./kcadm.sh get clients/$ADMIN_CLIENT -r master | grep -A2 authenticationFlowBindingOverrides
# defaultのauthentication flowを探す
./kcadm.sh get authentication/flows -r master | grep -B1 '"alias" : "browser"'
"id" : "8934619f-1111-484a-8da4-36c86a41dd26",
"alias" : "browser",
8934619f... がbrowser(Duoなし)のauthentication flow。それでupdateする
DEFAULT_FLOW=8934619f-1111-484a-8da4-36c86a41dd26
# flowを上書き
./kcadm.sh update clients/$ID -r master -s "authenticationFlowBindingOverrides={\"browser\":\"$DEFAULT_FLOW\"}"
これで id/pwだけでloginできるようになりました。
当然ですが緊急時の作業なので利用にはお気をつけを。
password reset
ちなみにこれでユーザパスワードはリセットできますが、先にloginしないとできないので、admin password忘れた場合はこれではできません。
./kcadm.sh get users -r {realm-name} -q username={username}
./kcadm.sh update users/{user-id} -r master -s "credentials=[{type:'password', value:'new-password', temporary:false}]"
DBのadmin userを消して、keycloak起動し直すときにKC_ADMIN_PASSWORDかなんかの環境変数で新たにユーザ作ってもらうしかないんじゃないかと。