この記事は Calendar for 東京電機大学 | Advent Calendar 2022 - Qiita の4日目です。
昨日は、HIBIKI-CUBEさんの ESP32でYDLiDAR GS2を使う - Qiita でした。
passkeyというものを知っていますか?passkeyとはFIDO/WebAuthnという仕様に沿って実装される機能の"名称"で、正式にはマルチデバイス対応FIDO認証資格情報と呼ばれパスワードの代わりに端末の生体認証などを使用して認証できるようにするものです*1。
Appleではパスキーが、GoogleもpasskeyをAndroidとChromeで実装しています。
この夢の技術を使用するとWebサービスのログイン*2にパスワードを必要とすることなくログインができるようになります。しかし、以下の記事で話題が出ているようにAppleのパスキーなどはキーチェンで複数端末で共有されるため、複数のパスキーを1ユーザに登録させるときに結構悩む問題が発生します。
上記スライドでYahoo! JapanはUX体験を上げるためWebAuthnを自動発動しておりキーチェンで共有している場合UAが一致していないためうまく認証ができない。そのため、ベターな案としてWebAuthnが確実に成功する場合は自動発動をし、それ以外はユーザに選択させるという方法を提案しています。
ぼくのかんがえるpasskey
私も考えます。必要条件として、
- passkeyは1ユーザで複数登録できる(しかし1端末に2つ以上は登録できない。iPhoneとAndroid端末で別々などという意味)
- できるだけpasskeyを有効にしている場合自動発動させたい
- 認証に失敗してユーザにガッカリ体験はあまり扨せたくない
とします。
まず、1の複数登録できるに関してはなににせよUserAgentかClientHintsを使用して使用しているデバイス、OSを判定する必要があると思います。これをしないとiPhoneで複数のpasskeyを登録できてしまったりする可能性があるためです。
で、自動発動についてですが、これはユーザが登録しているpasskeyが1つの場合 && passkeyを登録している端末の場合のみ自動発動するのが一番良いと考えます。
こうすることで、iPhoneでパスキーを登録して、iPhoneでログインした場合はWebAuthnを自動発動し、キーチェンで共有しているiPadでは自動発動はせずにユーザに従来のログイン方法を使用するかpasskeyを使用するかを選ばせることでエラーが発生してガッカリ体験ということが少なくなると思います。キーチェンで登録している別端末などでは1度passkeyでログインしたらサービス側のDBにUserAgent情報を追記して次回からその端末でも同じpasskeyを自動発動するようにするとなおいいと思います。
F-->W[ログイン完了]
I-->W
H-->W
みんなpasskey実装しようぜ!
中高生のパスワードとか名前+誕生日とかザラにあって、さらに使いまわしとか当たり前なので全Webサービスはpasskey実装したほうがいいと思います。