Keycloakはバージョン26.4でpasskeyをログイン画面に正式統合し、パスワードレス認証が実案件で現実的な選択肢になりました。WebAuthn Passwordless Policy、required action、discoverable credentialといった要素を、登録・認証の両フローと既存ユーザ展開の観点から実務目線で整理します。

01WebAuthnとpasskeyの整理

まず用語を実装者の目線で整理します。WebAuthnはW3C標準の認証API(正確にはWeb Authentication Level 2)で、ブラウザとauthenticator(認証器)の間で公開鍵暗号による認証を行う仕組みです。Keycloakは早くからこれをサポートしており、その経緯は公式ブログ(2019年)で確認できます。

passkeyは、このWebAuthnクレデンシャルのうち「discoverable(発見可能、旧称resident key)」なものを指す実質的な呼称です。discoverableであるとは、authenticator側にユーザ識別子を含むクレデンシャルが保存され、ユーザ名を先に入力しなくても認証を開始できる状態を意味します。加えて、プラットフォーム提供元(Apple/Google/Microsoft)によってデバイス間で同期される場合が多い、という運用上の性質もpasskeyのイメージに含まれます。

現場のコツ:「resident key」という語は仕様上deprecatedで、正式名称は「client-side discoverable credential」です。Keycloakの新しめのUIでも「Require Discoverable Credentials」という表記に寄っています。社内資料でも用語を統一しておくと、後述のポリシー設定で混乱しません。

022つのWebAuthnポリシーと2つのrequired action

Keycloakを触り始めて最初に戸惑うのが、WebAuthn関連の設定が「2系統」に分かれている点です。ここを最初に押さえると全体が見通せます。

この2系統は独立したポリシーで、それぞれ別のクレデンシャル種別(credentialType)としてユーザに保存されます。つまり同じ物理authenticatorでも、2FA用として登録するか、passwordless用として登録するかで別クレデンシャルになります。設計時は「そのauthenticatorをどちらの役割で使わせるか」を先に決めてください。

WebAuthn 2系統の対応関係 WebAuthn Policy 2要素目(2FA)として使う WebAuthn Passwordless Policy 1要素目/passkey として使う required action webauthn-register required action webauthn-register-passwordless credentialType: webauthn credentialType: webauthn-passwordless 同じ物理authenticatorでも役割ごとに別クレデンシャルとして保存される
図:WebAuthnの2系統。ポリシー・required action・credentialTypeが1対1で対応する。

02WebAuthn Passwordless Policyの要点設定

passkeyを扱うのはWebAuthn Passwordless Policyです。実案件で必ず確認する主なパラメータを挙げます(項目名は新しめのバージョン基準。細部はお使いのバージョンのServer Administration Guideで必ず確認してください)。

現場のコツ:Acceptable AAGUIDsとattestationを併用すると「支給したFIDO2キーだけを許可する」統制ができますが、synced passkey(クラウド同期型)はattestationやAAGUIDの扱いが緩く、この統制と相性が悪い場合があります。「同期passkeyの利便性」と「デバイス統制」はトレードオフとして要件段階で選び切ってください。

03登録フロー:required actionで登録させる

passkey(passwordlessクレデンシャル)をユーザに登録させる主な経路は次の3つです。

AIAについて、26.4系ではWebAuthn登録アクション(webauthn-registerwebauthn-register-passwordless)に skip_if_exists パラメータが追加され、「そのクレデンシャル種別を既に持つユーザには登録を促さずスキップする」制御が可能になりました。オンボーディングで毎回登録を促してしまう事故を避けられます。詳細は26.4のpasskey告知記事を参照してください。

04認証フロー:conditional UIとmodal UI

26.4での大きな前進は、passkeyがデフォルトのbrowserフローに正式統合され、フローを自作しなくてもログイン画面でpasskeyが使えるようになった点です。有効化は「WebAuthn Passwordless Policy の Enable Passkeys を有効にする」だけが起点になります。UIは2形態を使い分けます。

フロー内部では、passkeyが1要素目として使われたかを判定する「Conditional - credential」オーセンティケータが導入され、「passkeyでログインできた場合は2FAをスキップする」といった分岐が組めます。passkey自体が「所持+ユーザ検証」で多要素相当を満たすため、この分岐はUXと保証レベルの両立に有効です。ここはstep-up的な設計とも絡むので、要件次第ではステップアップ認証の考え方も合わせて整理してください。

passkey パスワードレス認証(browserフロー) ユーザ/ブラウザ authenticator Keycloak Relying Party アプリ challenge発行 ユーザ検証 (生体/PIN) 署名付き応答 公開鍵で検証 トークン発行 discoverable credentialならユーザ名入力を省いて開始できる
図:passkeyによる認証の流れ。ユーザ検証と所持証明を1操作で満たす。

05既存ユーザへの展開設計

技術的にpasskeyを有効化するのは難しくありません。実案件で難しいのは「パスワードを持つ既存ユーザ数万人にどう段階展開するか」です。EMWがエンタープライズの認証基盤で実際に気をつけている論点を挙げます。

現場のコツ:展開初期は「passkey登録済みユーザ数」「passkeyログイン成功率」「フォールバック(パスワード)ログイン率」をイベントで可視化しておくと、必須化に踏み切る判断が定量的にできます。Keycloakのイベントを外部に流す設計は監視基盤と合わせて先に組んでおくのが得策です。

06実装・運用の注意点

Keycloakでの認証フロー全体の組み方は認証フロー設計に、より広い実装は導入事例にまとめています。

まとめ

Keycloakのpasskey対応は26.4で実装ハードルが大きく下がり、WebAuthn Passwordless Policyの有効化を起点に、フロー自作なしでpasskeyログインが成立するようになりました。技術的な要点は「2つのポリシー×2つのrequired action」「discoverable credential」「conditional/modal UI」の3つに集約されます。一方で実案件の勝負どころは、既存ユーザへの段階展開とリカバリ設計という運用面です。まず任意登録から始め、登録率とログイン成功率を見ながら必須化へ進める——この順序を守ることが、パスワードレス移行を止めないコツです。

参考(一次情報)

認証基盤のパスワードレス化やKeycloakのフロー設計でお困りの際は、実構築の経験を踏まえてお問い合わせください。

相談する
← ブログ一覧へ戻る