巷のAndroidアプリケーションが「Passkeys対応しました」という話が出ても、実際にはAndroidデバイスでの自動入力の設定に従ってPasskeysプロバイダが選択されるのではなく、Google Password Manager(以下GPM)が使われることが多いと思う。AndroidでPasskeysプロバイダ(実際にはCredential Managerサービス)が自動入力でサポートされたのはAndroid 14からなのだが、Android 14以降のデバイスを使っていて、かつ自動入力をGPM以外(例えば1Password)に設定していたとしても、GPMが使われている場合をよく見る。
Googleは過去のAndroidバージョンでWebAuthn対応を容易にするため、FIDO2ライブラリを別途提供している。このライブラリは、Passkeysの場合、Android 14以降であってもGPMを使うように設計されている。Android 14以降のみをターゲットにするアプリはほぼ存在しないため、このライブラリを使うのが最も手っ取り早いからだろう。また、WebAuthnリクエスト用のJSONデータ構造などもライブラリ側で吸収してくれるため、WebAuthnの詳細な知識なしでPasskeys対応アプリケーションの実装が可能である。
Firefox for AndroidではCredential Manager対応をJetpackなしで実装しているため、FIDO2ライブラリとCredential Managerの両方を使うようにしている。これが非常に面倒で、例えばWebページがPasskeysを使ったログインをリクエストしてきたとしよう。その認証情報がどのプロバイダに入っているかという情報はWebブラウザ側にはないので、どうしようもない。仕方なく、まずGPMに認証情報が入っているかを確認し(GoogleのFIDO2ライブラリにはそのような機能が数年前に追加された)、そこになければCredential Managerに問い合わせするようにしている。これも苦肉の策なのだが、Chromeのコードを見ても同じようなことをしていて、まあ何とも言えない感じである。
またCredential Manager対応したとしても、Firefoxに寄せられているバグ報告を見ると、Bitwardenにしているのだけど動かないとかの報告がたまにある。こっちでは全く再現できないのだが (自分は1passwordとBitwardenで常にテストを行っている)、まぁデバイスやGoogle Play Serviceの依存関係で動いたり動かなくなったりするっぽいので、トラブルの元でもある
こんな状況なので、Credential Manager用のAndroidXライブラリを使うよりも、圧倒的にFIDO2ライブラリを使った方が楽である。 そもそもChrome for Androidがサードパーティ製のPasskeysプロバイダを積極的に使う仕組みになっていないので、Google側もきちんと問題をトラッキングできていないような気がしている。
こういうところはWindowsやmacOSのように、WebAuthnのクライアント機能自体をAPIとして提供した方が、クライアントアプリ側で全く考える必要がないし、そもそもFIDO2ライブラリ側ですべて吸収すればよかったのにそうしないところが、Googleのセンスのなさというか、まあ言い方を変えれば、雇った人たちの仕事を作ってあげたんだろうね、としか言いようがない。