Keycloakを学ぶ④パスキー編

記事タイトルとURLをコピーする

こんにちは、アプリケーションサービス本部の上田です。

ここのところ魚焼きグリルを使うのがマイブームで干物や鶏肉を買ってきてはグリルにかける毎日を送っています。 意外と手入れが楽で放っておくと料理ができるのでなかなか便利です。

前回までで一通りのKeycloak設定方法は解説しましたが、今回は指紋認証やPIN、いわゆる「パスキー(Passkeys)」認証をKeycloakに取り入れてみます。これが導入できると、一気にモダンな認証基盤という感じがしますね。

早速設定していきますが、注意点として今回はWebAuthnを使う都合上HTTPS接続が必須となります。

localhostで動かしている場合には任意の方法でHTTPS対応を実施してください。

また例によってtest_realmを使用していますがどのレルムでも追加方法は同じです

作業は以下の流れとなります。

  1. WebAuthnの設定

  2. 認証フローの作成とバインド

  3. ユーザーによるパスキー登録

まずはWebAuthnの設定からやっていきましょう。

WebAuthnの設定

そもそも「WebAuthn」ってなに?となる方もいるかと思いますが、簡単に言うとパスワードレス認証をwebで行えるようにしたAPIのことです。

developer.mozilla.org

パスワードレス認証のおかげで長いパスワードを覚えなくても、手軽かつ安全に認証を行うことができます。

Keycloakはこの WebAuthn に標準対応しているため、管理画面から設定可能です。

まずは左側メニューから以下のように遷移します。

Authentication>Policies>Webauthn Passwordless Policy

ここで以下のように設定を行います(設定変更が必要なもののみ記載)

  • Require discoverable credential(認証器のパスキーにユーザー情報を記録するか)
    • Yes
  • User verification requirement(認証器がユーザーの認証を実施するか)
    • Required

設定できたら最後に「Save」をして保存します。

これでWebAuthの設定はOKです。

認証フローの作成とバインド

続いて、パスキー認証を行うための「フロー」を作成し、それをブラウザ認証時の動作として紐付ける(バインドする)必要があります。

新規でフローを作成することもできますが、今回はデフォルトのブラウザ用フローをコピーして作成します。

左側メニューから以下のように遷移します。

Authentication>Flowsタブに移動して、「browser」から「Duplicate」

いい感じに名前と説明を記載したら「Duplicate」を押下。

コピー直後は元のフロー設定がそのまま残っています。

今回は動作を確認しやすくするため、一度既存のステップをすべて削除します。

※実際の運用では、セキュリティ要件に応じて必要なステップを追加したり残してください。

全部消した後に「Add execution」から以下2つのステップを追加します。

  • Username Password Form(いつものユーザー・パスワードフォーム)
    • Required
  • WebAuthn Passwordless Authenticator(パスキー認証)
    • Required

これで「ID/パスワード入力後にパスキーを要求するフロー」が完成しました。

次に、このフローを実際のブラウザ認証で使うように設定します。

同じ画面の右上の [Action] から [Bind flow] > [Browser flow] を選択し、保存すればKeycloak側の準備は完了です。

ユーザーによるパスキー登録

次に、ユーザーが使用するパスキーをデバイスに登録します。この作業はユーザーごとに行う必要があります。

https://{自身のドメイン}/realms/{設定したいレルム、今回であれば test_realm }/account/

左側メニューから以下のように遷移します。

Account security>Signing in>Passwordless の 「Set up Passkey」

パスキー設定のダイアログが表示されるので、OSやブラウザの指示に従って指紋やPINを登録します。

登録後、任意で分かりやすい名前を付けておくと、管理しやすくなります。

ここまでで一連の設定が完了しました。早速動かしてみましょう!

動作確認

設定した内容が正しく動くか確認してみましょう。

一度アカウントコンソールからログアウトし、再度ログインを試みます。

まず、通常通りユーザーIDとパスワードを入力します。

ログインボタンを押下するとパスキー要求画面が出てきました!

パスキー認証を行うと、無事にアカウントコンソール画面に入ることができました。

まとめ

今回は Keycloak を使ったパスキー認証の設定方法をご紹介しました。

普段何気なく利用しているパスキー認証が、Keycloakを使えばこれほど簡単に導入できるのは驚きですね。 手軽にセキュリティを強化できるだけでなく、認証フローをカスタマイズすることで「パスキーのみ」や「パスワード+パスキー」といった柔軟な運用ができるのも大きなメリットです。

ただし、フローの設定項目は多岐にわたるため、実際の導入にあたっては要件に合わせて細かく検証することをおすすめします。

今後も Keycloak に関する学習のアウトプットを続けていきたいと思います。この記事がどなたかの学習の助けになれば幸いです。

最後までお読みいただきありがとうございました。

上田幹也(執筆記事の一覧)

アプリケーションサービス部

趣味は飲酒と長風呂、音楽とM:tGです。どちらかというと犬派。