🔑

パスキー導入サービスのログインUXからDiscoverable credentialsを理解しよう

2023/12/21に公開

ritouです。

Digital Identity技術勉強会 #iddance Advent Calendar 2023 シリーズ2の記事です。

https://qiita.com/advent-calendar/2023/iddance

最近、パスキーの定義のところで、Discoverable credentialsというのを目にした人がいるかと思います。

https://passkeys.dev/docs/reference/terms/#passkey

Passkey

The high level, end-user centric term for a FIDO2/WebAuthn Discoverable Credential. Like “password”, “passkey” is a common noun intended to be used in every day conversations and experiences.

Passkeys are designed to be used without additional login challenges. All passkeys can be used with modern sign in experiences like the Autofill UI or with a “Sign in with a passkey” button.

From the technical side, there are two flavors of passkeys: synced and device-bound.

そして、えーじさんが、Discoverable Credential(s)についての解説記事を書かれていました。

https://web.dev/articles/webauthn-discoverable-credentials?hl=en

これを読んでもわからん、もっとゆるい説明を頼むみたいな人に向けて、既に動いているサービスのログインUXと関連付けながらDiscoverable credentialsをもっとざっくり説明します。

Non-discoverable Credential

まずは Discoverable ではない Credentialについてです。

一言で説明すると、番号しかついていない鍵 です。

サービス(RP)側は、ユーザーとこの鍵の番号を紐付けて管理します。

GoogleとかYahoo! JAPANのようなログインフローは Identifier-firstパターンなどと呼ばれていますが、ここではFIDO認証が使われ始めた時に使われていたフローを例に挙げます。この時に何が行われているかというと、 RPが対象ユーザーに紐づけられた番号の一覧を指定してFIDOの認証を要求 します。

ブラウザを経由して認証器に番号の一覧が渡され、そこで対象の鍵情報が管理されていればダイアログでローカル認証が要求されます。(スクショではメアドが出ているので厳密なやつではないですが、すぐにローカル認証が要求される感じをイメージしてもらえばおkです)

Discoverable Credentials

それに対して、Discoverable Credentialは 番号と名札付きの鍵 と言えます。

上述の記事で触れられていますが、

  • user.name
  • user.id

が一緒に保存されます。

先ほどの例で挙げたIdentifier-firstパターンの最近の動きで言うと、RPは鍵の番号のリストを指定して認証を要求します。認証器は手元で管理している鍵とリストを照合し、対象が一つだけ見つかったらすぐにローカル認証を要求したり、複数あったとしてもダイアログに表示してユーザーに選択させたりできます。

GitHubの "パスキーでログイン" というボタンを押した時の挙動について説明します。
この時、RPは鍵の番号を指定しません。認証器は手元で管理している鍵に名札がついているので、それをダイアログに表示してユーザーに選択させます。

Autofillにも触れておきましょう。
GitHubやマネーフォワード IDなどいくつかのサービスはAutofillにも対応していますが、この時にRPは番号を指定せずにAutofillを要求しています

ブラウザと認証器は、利用可能な鍵情報を入力フォームに補完 してユーザーが選択します。

上述の記事で再認証と表現されているものに触れます。再認証以外でも、マネーフォワード IDのログイン画面でemailの値を入力すると、パスワード入力画面でもAutofillが動くのですが、この時に RPは鍵の番号を指定しつつAutofillを要求しています

ブラウザと認証器は、指定された番号のリストを用いて利用可能な鍵情報を入力フォームに補完 してユーザーが選択します。

まとめ

ざっくりとDiscoverable Credentialsについて説明しました。

これと別の話で、同期する/しないという話も良くてできます。こっちは 合鍵を保管しておいてもらえる不動産屋さんがいるかどうか ぐらいで考えておいてもらえば良いでしょう。

アドカレやイベントなどに関連して、パスキーやFIDOについての記事が結構出てきています。
こんなのわかるわ!ってなった方は、上述の記事のように実際に登録や認証のためにどのような実装が必要かを見てみましょう。手元で実際の動きを見てみた上で、サービス導入に向けた検討に繋げてもらえたら嬉しいです。

ではまた!

Discussion