携帯電話のPasskeyはもう使えるメモ
別件で実装を調べてたら、もう各社のデバイスには(iOS16とか今後のAndroidのアップデートを待たずに)実装が入ってたので試してみた。
WebAuthnなサイトでQRコードを出す
Windows上でChrome Canaryを使って、WindowsのFIDOプロンプトをひたすらキャンセルしていると最終的にQRコードを尋かれる。
この "Use phone with a QR code" は従来の"Add a new Android phone"(J: "新しいAndroidスマートフォンを追加")から変更されている。まぁiPhoneにも対応したしね。。
表示されるQRコードは FIDO:/
で始まるEfficient QR codes https://www.imperialviolet.org/2021/08/26/qrencoding.html (10進エンコードを使ったバイナリのコンパクト表現)で、CBORエンコードされた公開鍵や接続先情報になっている。
これをAndroidやiOSのカメラでスキャンすると、passkeyを携帯電話にコピーしたり、それを使用したりできる。
PC側要件
Bluetooth LEのアドバタイズを受信できる環境が必要になる。LEじゃないBluetoothだけになったら何が起こるのかは不明。
電話側要件
細かいプロトコルはWebSocket経由で実施されるので、電話側にもネットワーク接続が必須。また、近接検出のためにBluetooth LEも必要。
手元の環境では、接続先のサーバーは wss://cable.ua5v.com/cable/connect/2219B3/C2A97D05A31E6C5B2A3344F7E8E5F052 (Pixel5aの場合) とか wss://cable.auth.com/cable/connect/4D444C/9EAA66E2E3522BD78563DD349C1F33D1 (iOS15の場合) だった。
このアドレスはGoogle Chrome側にハードコードされているので、任意にサーバを立てたりするわけにはいかないようだ。
iOS 15の場合
標準のカメラアプリでQRコードをスキャンすると警告される:
同期プラットフォームの認証機能って何だよ。。指示通りXcodeとペアリングしてDeveloper → Syncing Platform Authenticator をオンにすることでUIを使用できる。
ただし、iPod touchだと一度設定したPasskeyをサイトで使うことができなかった。iPadでは正常に使えたので、もうこの時点でiOS16非対応デバイスはハブられているんだろうか。。
また、Androidと違って、PC側の接続情報を覚えさせる機能が現時点では無く、都度QRコードを読ませる必要があるのもちょっとダサい。たぶんiOS16正式リリース時にはなんとかなるんだろうが。。
Android(Pixel5a)
Pixel5aの標準カメラアプリでQRコードをスキャンすると "このパソコンの情報を保持する" のチェックボックス付きの画面があらわれ、これにチェックを入れた状態にしておくと、
- 以降ChromeからWebAuthnする際に選択肢として表示されるようになる
- Windows側のFIDOが使われなくなる
追加された"Pixel5a"を選択すると、QRコードのスキャン不要で直接 ネットワーク経由で 接続するようになる( wss://cable.ua5v.com/cable/contact/... )。