Android 14でPasskeyのQRコードログインがエラーになる事象を調べていたら、意外と奥が深そうだった件
(2024/10/12追記)修正されたようです
改めて試してみたところ、この事象が修正されていました。Android 14のmotorola moto g53y 5G、OPPO Reno9 Aで、PCのブラウザーで表示させたPasskeyのQRコードを読んでログインできることを確認しました。おそらくGoogle Play開発者サービスの修正で対応されたのでしょう。
はじめに
Passkeyは、スマホ端末に認証情報を保持して、Webページやアプリでログインを行える技術です。Android端末もPasskey認証に利用できますが、Android 14になってから、PCのWebページにPasskeyでログインしようとするとエラーになることに気づきました。調べていくと、Android 14に関する意外と奥が深い事情が見えてきました。
Passkeyでのログイン手順と発生事象
GitHubへのログインを例に、以下で簡単に状況を説明します。まずログイン画面の「Sign in with a passkey」をクリックします。
パスキーを使用したサインインの画面が表示されるので、「iPhone、iPad、または Android デバイス」を選択して「次へ」をクリックします。
次の画面でQRコードが表示されるので、これをスマホでスキャンします。
スマホでQRコードをスキャンすると、本来であれば以下の通り、スマホが保持しているパスキーの情報と照合して、該当するアカウントを表示します。「続行」をクリックすると、スマホ上で指紋などの認証を行った後、ログインが完了する流れです。ちなみにこの画面はAndroid 11のAQUOS sense3で表示したものです。
ところがAndroid 14(motorola moto g53y 5G、OPPO Reno9 Aで確認)の場合、この画面で以下のエラーが表示されてしまいます。再現率100%です。エラーメッセージは「もう一度試すには、別のデバイスでプロセスを再起動してください。」で、プロセスの再起動というのがよくわからない感じです。
ちなみにスマホの言語を英語に切り替えるとこんな感じ。エラーメッセージは「Restart the process on your other device to try again.」、つまり別のデバイスでやり直せということです。日本語訳が今一つイケていませんね。
端末(motorola moto g53y 5G)をAndroid Studioに接続して、エラー発生時のログを見てみたところ、以下の内容が出力されていました。「no provider dependencies found」と言われています。
getCredentialAsync no provider dependencies found - please ensure the desired provider dependencies are added
Android 14におけるパスワード管理の変更
ここでいうproviderとは何なのか、Android 14で認証関係のproviderということでいろいろ探してみると、以下のページが見つかりました。
細かいことは省略しますが、Android 14ではパスワード管理方法が変更され、複数のサインインソリューション(パスワード管理ソフトなど)を同時に有効にできるようになったとのこと。これに併せて、これまではGoogleのパスワードマネージャーでしか使えなかったPasskeyが、Bitwardenや1Passwordといったサードパーティのパスワード管理ソフトでも利用できるようになりました、ということになっています。
BitwardenでPasskeyが利用できない?
ところが、Android 14の端末でもBitwardenでPasskeyが利用できないというissueが、BitwardenのGitHubリポジトリに投稿されていました。
議論は結構長く続いていますが、結局は端末により状況が違うという話になっていきます。具体的には、BitwardenでPasskeyが利用できる端末の場合、以下の通り設定画面で「Preferred service」と「Additional services」が指定でき、複数のパスワード管理アプリを同時に有効にできます。
一方で利用できない端末では、設定画面は以下の通りになっており、明らかに様子が異なります。この画面構成はAndroid 13以下と同じもので、「自動入力サービス」では複数のパスワード管理アプリから1つしか選択できません。
どうも、端末によって認証関係の機能、具体的には「android.software.credentials」の有効化状況が異なり、この機能が有効な端末のみ、Android 14で導入された新しい認証の機能が利用できるということのようです。
「android.software.credentials」の状況
ここで「android.software.credentials」が各社端末でどうなっているかを調べてみます。
ここまでわかった内容より
上記のissueでは、Sonyとmotorola、Nothingの端末で「android.software.credentials」が無効と報告されています。また、手元のmoto g53y 5GとOPPO Reno9 Aも無効になっていました。
NTTドコモの技術資料より
他社はどうでしょうか。NTTドコモが、自社のAndroid端末について情報を出しており、各端末のフラグ状況も「利用可能なFeatureの一覧」で確認できます。
全部をくまなく見たわけではありませんが、おおむね以下の傾向がありました。Sonyが無効ということは、上述のissueで言及された内容と一致しています。
Google、Samsung、SHARPの端末は「android.software.credentials」有効
Sonyの端末は「android.software.credentials」無効
motorola端末の説明書より
Y!mobileとSoftBankより、motorolaの新機種であるmoto g64y 5Gとedge 50s proの取扱説明書が公開されています。いずれもAndroid 14を初期搭載していますが、説明書によると設定画面の「パスワードとアカウント」のメニュー構成に「自動入力サービス」が見られ、複数のパスワード管理ソフトを同時に有効にする構成にはなっていません。これより、motorolaのAndroid 14では「android.software.credentials」が無効と考えてよいのではと思います。
Xiaomi HyperOSの状況を推測
前述したPasskey認証失敗時のエラー文言(英語)「Restart the process on your other device to try again.」でGoogle検索すると、以下のページが見つかります。Xiaomiの新OS「HyperOS」で、冒頭に示したPasskeyエラーが発生しているという内容です。
Passkey Not Working With Hyper OS
https://www.reddit.com/r/Xiaomi/comments/1crmf8h/passkey_not_working_with_hyper_os/
後述しますが、冒頭のPasskeyエラーは「android.software.credentials」無効のAndroid 14で発生する可能性が高いため、Xiaomi(HyperOS)は「android.software.credentials」無効と推測されます。
「android.software.credentials」の状況まとめ
ここまでの情報から、「android.software.credentials」の有効・無効は、おおむね以下状況と推測されます。個人的には結構便利でインパクトのある新機能と感じていますが、その割には無効になっているほうがむしろ多くない?という感じです。
有効:Google、Samsung、SHARP
無効:Sony、OPPO、motorola、Nothing、Xiaomi
Passkeyログインエラーの原因考察
ここで冒頭の「Android 14の端末でPasskeyでのログインがエラーになる」原因を、以下の通り考察してみます。
Android 14から、パスワード管理方法が変更され、複数のパスワード管理アプリの同時利用や、サードパーティアプリによるPasskeyの管理といった新機能「android.software.credentials」が利用できるようになった。
ただし、すべてのAndroid 14端末でこの新機能が有効になっているわけではない(←重要!)
推測1:Passkeyのログイン処理を行うとき、Android 13以下は従来通りの処理を行い、Android 14では新機能を利用するようになっている
推測2:Android 14では常に上述の新機能が利用できる想定で処理が走るが、新機能が有効になっていない端末では見かけ上パスワード管理ソフトが全く登録されていないように見え、「no provider dependencies found」というエラーになる
Passkeyの認証はGoogle Play開発者サービスによって後付けで提供されているため、OS自体はアップデートせずにサイレント修正が可能と思います。具体的には、端末の「android.software.credentials」を参照して、無効になっている場合は、Android 14でもAndroid 13以下と同じ処理にすればいいはずです。この際Android 14の新機能は使えなくても、Android 13以下と同じ挙動でPasskeyが使えればいいので、修正されることを期待したいです。
まとめ
本記事では、Android 14端末を利用して、PCのWebページにPasskeyでログインしようとするとエラーになる事象を取り上げました。事象を説明するとともに、開発環境でのログ出力やネット上の情報から、Android 14で導入された認証関係の新機能「android.software.credentials」が、Android 14にも関わらず無効にされている環境で本事象が発生する可能性を示しました。新機能が使えないことはともかく、Passkeyでのログインという既存機能が全く使えないことはさすがに受け入れがたいので、修正されることを期待します。