QRコードを省略できるAndroidでのパスキーのクロスデバイス認証(Persistent Linking)
パスキーのクロスデバイス認証時、Android ではQRコードのスキャン(読み取り)を省略できるみたいですね。
私は普段 iPhone を使用しているため気付きませんでした。
Android を使用されている方にとっては当たり前の話かもしれませんが、なんとなくニッチな話題としてメモ程度にまとめておきます。
QRコードを省略できるAndroidでのパスキーのクロスデバイス認証
PC等で認証をする際に、スマホ等の別デバイスでパスキーを使用するクロスデバイス認証についての話です。
以下の2つのデバイスがあるとします。
- デバイスA: ブラウザやアプリ等で認証を求められる操作をしたPC等
- デバイスB: その認証のためにパスキーを使用するスマホ等
これらのデバイスで、以下のようにクロスデバイス認証を行うケースです。
- デバイスA (PC等) のブラウザやアプリで認証要求
- 認証要求に対し、デバイスB (スマホ等) でのパスキー認証を行うことをデバイスA上で選択(※)
- デバイスAの画面に表示されたQRコードをデバイスBでスキャン
- デバイスBの画面ロック解除と同等の操作等によりパスキーを使用
- デバイスAのブラウザやアプリで認証完了(パスキー認証成功)
※ QRコードのスキャンについては、②の選択肢は特定のデバイスでなくiPhone、iPad、またはAndroidデバイス
のようになっているはず


上記の中で、③のQRコードのスキャンってけっこう面倒ですよね。具体的には、スマホを持ち上げてカメラ起動してPCのディスプレイに対して向きや距離を調整して…といった感じです。最近のスマホ、まぁまぁ重たかったりするので絶妙にダルいです。
しかし、デバイスBが Android であれば、初回のQRコードのスキャン時にデバイス間の接続を保存する設定(後述)をしておくことにより、次回以降のQRコードのスキャンを省略することができます。③のQRコードのスキャンをしなくても、代わりに該当のデバイスB (スマホ等) に表示される通知に応答するだけで後続の操作を進められます。
- (不要になる)
デバイスAの画面に表示されたQRコードをデバイスBでスキャン
上記の③の操作が、以下のように変わります。
- 該当のデバイスB (スマホ等) に表示される通知に応答するだけ
まぁ顔認証ならスマホを持ち上げる必要性はあるかもしれませんが、かなり操作は楽になります。
ちなみに、③の前段である②のデバイス選択時には、具体的なAndroid端末名が表示されるようになります。通知を送信するAndroid端末名を具体的に選択できるということです。従来のようにQRコードを表示させる手順での認証も可能です。


(たぶんBluetooth接続時の名前)
デバイス間の接続を保存する設定
Androidで初回のQRコードのスキャン時にデバイス間の接続を保存する設定というのは、以下のような操作のことです。
対象のAndroid端末で初回のQRコードのスキャン時に
このデバイス間の接続を保存する
のチェックを有効化次回のQRコードをスキップしますか?
と尋ねられた際にOKを選択
例えばこんな画面です。


このデバイス間の接続を保存する
のチェック別パターンの画面はこちら(別サイト様)。
この設定をしておけば、次回以降の同じサービス(RP)でのパスキー認証時には前述のようにQRコードのスキャンが不要になります。
私が試した際の環境
私が試した際の環境についてです。
上記のQRコードのスキャンを省略できる動作は、特定のブラウザに依存したものではなく、Androidを用いたクロスデバイス認証であれば利用できるものと理解しています(補足事項は後述)。
私が今回試したAndroid端末は、AQUOS wish3のスマホと、AvidPad というメーカーのA90というタブレットです。いずれもAndroidのバージョンは14で、同じGoogleアカウントでサインインした環境です(つまり、これらの2台ではGoogleパスワードマネージャーによる同期パスキーを利用可能)。
あと、PC側はWindows 11で、ブラウザはEdgeです(他のブラウザについては後述)。




もう少し詳しい設定や条件等は以下のとおりです。
- 今回、パスキーの登録や認証の確認を行うサービス(RP)は amazon.co.jp
- Android端末で生体認証をオンにしていなくてもパスコードの認証のみでパスキーのクロスデバイス認証に利用可能
- PC側のWindowsの設定で、
Bluetoothとデバイス
→モバイルデバイス
の中で、モバイルデバイスへのアクセス許可やスマートフォン連携の設定はオフのままで動作可能 - Androidの再起動直後はクロスデバイス認証が失敗するかも(ちょっと待ってやり直せばOK)


もう少し詳しく理解(推察)
このQRコードのスキャンを省略できるクロスデバイス認証について、もう少し理解を深めてみます。推察も含みます。
Persistent Linking
まず機能の名称についてですが、passkeys.devによると、このQRコードのスキャンを省略できるクロスデバイス認証のことを、非公式な名称としてPersistent Linking と呼ぶらしいです。
Persistent Linking
The informal name for creating a relationship between a Cross-Device Authentication authenticator (typically a phone or tablet) and Cross-Device Authentication client (typically a laptop or desktop), which enables future use without having to scan a QR code.Both the client and authenticator must support the functionality.
出典:passkeys.dev – Terms Example with an Android phone linked to a Windows 11 device
公式(FidoAlliance関連)やプラットフォーム側で “Persistent Linking” についての言及は、passkeys.devとMicrosoftに地味めに記載があります。一方で、GoogleやAppleでは “Persistent Linking” に関する言及は見当たりませんでした。
Starting in Windows 11 version 23H2, FIDO Cross-Device Authentication (CDA) is supported globally at the operating system level and available for all apps and browsers. Persistent linking is available between Android devices (authenticator) and Windows 11 23H2+. iOS and iPadOS do not support persistent linking.
In Windows versions prior to 11 23H2, including Windows 10, support for FIDO Cross-Device Authentication (CDA) is only available in Chrome and Edge. It is not available globally. Persistent linking is available between Android devices (authenticator) and Chrome and Edge (clients) on these versions. iOS and iPadOS do not support persistent linking.
出典:passkeys.dev – Windows
ということで、以降は Persistent Linking という表現も使用します。
対応する環境の実際
この Persistent Linking(QRコードのスキャンを省略できる動作)は、特定のブラウザに依存したものではなく、Androidを用いたクロスデバイス認証であれば利用できるものと理解しています。
しかし実際のところ、以下のような点に留意が必要そうです。
- 認証要求を受ける操作元(前述の例におけるデバイスA)が Windows の場合にのみ利用できる機能かも。
- Androidで利用できるパスキーの話なので、passkey provider (credential manager) として Google パスワードマネージャーを使うケースが多いと思われる(補足事項は後述)。
- Windows PCの代わりに macOSは未確認。
- Windows PCの代わりに iPhone (iOS) でもAndroidを用いたクロスデバイス認証はできるけど、その際にAndroid側で Persistent Linking の設定メニューは表示されなかった(接続を記憶できず)。
- ブラウザに関しては、Firefoxであってもデバイス間の接続を記憶したAndroidを選択でき、QRコードのスキャン省略が可能だった(ブラウザでなくOSが表示する実装になったということ?)。
今後も対応状況に変更はあると思います。
保存したデバイス間の接続情報の管理
私が試した際に、ややこしいと言うかちょっと気持ち悪いと思ったのは、デバイス間の接続を保存するという設定でありながら、PCとAndroidのどちらの設定画面においてもその情報が保存あるいは登録されていることを確認できない点です。
- Android端末のBluetoothのデバイス一覧にはPCが表示されない
- PC側のWindowsの設定で、
Bluetoothとデバイス
→デバイス
にも対象のAndroid端末が表示されない
つまり、このデバイス間の接続を解除したい場合にどうすれば良いのか、パッと見よく分かりません。例えば、Androidのスマホを買い替えたら古い方の接続を削除したいですよね。その方法が分からないということです。
一応、この削除手順については別記事を作成して移したいと思いますが(しないかもしれませんが)、以下のように削除はできました(MicrosoftのQ&Aを参考に)。
デバイス間の接続の記憶をした後は、対象のWindowsのレジストリにおいて以下のパス配下に値が格納されています。
コンピューター\HKEY_USERS\S-1-5-20\Software\Microsoft\Cryptography\FIDO\xxx\LinkedDevices\yyy


Nameの値にAndroidのデバイス名(認証時に表示されるもの)が格納されているので、不要なNameを含むキー(yyy)を削除すれば、以降は対象のサービス(RP)で認証要求があった際に表示されなくなります。
一方、Android側にはこのような操作に関わる情報が保存されているといった話は見当たりませんでした。通知のきっかけはPC側なので、そちらに保存できていれば良いのでしょう。たぶん。
とりあえず、現状の実装はこんな感じなのだと思います。そのうち管理UIが出てくるかもしれません。
通知の仕組み
Persistent Linking(QRコードのスキャンを省略できる動作)を用いたクロスデバイス認証では、PC側(前述の例におけるデバイスA)で認証要求があった際にAndroidを選択すると、そのAndroidにプッシュ式の通知が表示されます。
私が確認した限りの推察ですが、この通知は以下の経路で行われているように思います。
①PC(認証要求を受けたデバイス) → ②Googleの何かしらのインフラ(推察) → ③対象のGoogleアカウント → ④対象のAndroidデバイス
この通知の後は、QRコードを読み取るパターンのクロスデバイス認証と同様で、PCとAndroid間でのBluetooth接続(BLE)、およびAndroidでのロック解除と同等の操作等によるパスキーの使用が行われ、パスキー認証が完了します。
上記の通知の経路はどういうものかと言うと、例えば、Android端末からインターネット接続できる状態でないと通知が届きません。また、Androidの設定
→Google
→(Googleアカウント選択)→このデバイスのアカウントを管理
→所有者のアカウント
でGoogleアカウントを削除した場合にも通知は届かなくなります(Googleアカウントを再登録してGoogleパスワードマネージャーの初回の本人確認を終えると復活します)。Bluetoothだけをオフにすると、”Bluetoothをオンにしてください” という通知が表示されます。
上記より、実質的にGoogle パスワードマネージャー以外の passkey provider では Persistent Linking を利用できないのではないかという気もします。例えば、1Passwordとかだと動作しないかもしれませんが、Googleが親切に実装していれば動作するかもしれません。とりあえず今のところ試す機会は無さそうです。
なので、Android の Persistent Linking の通知機能は、AndroidだけでなくGoogleのプラットフォームを幅広く活用した複雑な機能のように感じました。QRコードのスキャンを省略するための裏側がこれだと考えるとすごい。
(補足)Chromeで試した結果
amazon.co.jpで試した限り、Chromeではクロスデバイス認証を選択できないケースが多かったので、上記はEdgeで試した結果をまとめてありますが、以下にChromeで試した結果をメモしておきます。
少なくとも amazon.co.jp へのログイン時には、Chromeの場合、認証時にローカルに利用可能なパスキー(Windows Hello)があればそれが優先される動作のようで、クロスデバイス認証を選択できませんでした(Googleアカウントにログインしていないシークレットモードであっても同様で、よく分かりませんでした)。ローカルに利用可能なパスキーが無い状態であれば(amazon.co.jp上でパスキー登録をいったん削除)、クロスデバイス認証(※)が可能になりました。あとは、ログイン時でなくパスキー追加の際に要求される認証時にもクロスデバイス認証(※)が可能になりました。
※QRコードの読み取りや、登録済みのAndroidデバイスが選択肢として表示される動作
あと、これは試す際の環境の準備の仕方が良くないだけですが、パスキーを amazon.co.jp に複数登録してあると、どのパスキープロバイダーを使って認証しているのか判別できなくなったりします。
公式(FidoAlliance)や各プラットフォームでの言及
“Persistent Linking” という表現でなく、単にQRコードのスキャンを省略できる動作についての説明が各所で地味めに言及されています。
Passkey Central (FidoAlliance) での説明は以下です。
- Android only: Sign in dialog, Save QR code.
On Android only, if this is the user’s first time using cross-device sign-in, they are prompted to skip or save the QR code for future access. The dialogue then prompts the user to sign in or decline to sign in with a passkey for a specified email. If the user opts to sign in with a passkey by selecting the OK button on Android or the Confirm button on iOS, the mobile OS prompts the user to use their screen lock to authenticate.
Cross-Device Sign-In | Passkey Central
以下はMicrosoft Authenticatorによるパスキー認証時の説明です。
For quicker sign-in, Android allows you to remember some browsers and Windows devices after you scan the WebAuthn QR code. In such cases, instead of having to scan a QR code each time, you can select the device and receive a notification to continue the passkey authentication.
Sign in with passkeys in Authenticator for Android and iOS devices – Microsoft Entra ID | Microsoft Learn
以下はブラウザ側(Chrome)のヘルプです。
ヒント: モバイル デバイスで QR コードをスキャンした後、デバイス同士を記憶させるかどうかを選択できます。記憶しておくと、パスキーが必要な場合にモバイル デバイスが選択項目としてパソコンに表示されます。選択すると、デバイスに本人確認の通知が届きます。
Chrome でパスキーを管理する – パソコン – Google Chrome ヘルプ
この機能がやんわりと意識されている印象です。
iOSでは毎回QRコードをスキャンが必要
ついでに iPhone (iOS) の場合について。
上記のQRコードのスキャンをスキップできる動作は Android 固有のものなので、iPhone (iOS) では利用できません。
よって、iPhone でパスキーを使用してクロスデバイス認証を行うには、毎回QRコードのスキャンが必要です。
便利なので、今後 iPhone でも使えるようになったりするんですかね?Apple がやらないパターン?
まとめ
パスキーのクロスデバイス認証時、AndroidであればQRコードをスキャン省略できる動作についてでした。
そもそも同期パスキー環境をちゃんと用意できていれば、普段使用するデバイスでクロスデバイス認証をわざわざ利用する機会は無いはずなので、本記事に記載した動作はニッチかと思います。
ただ一応、Windows Hello未対応のPCを使用しているケースや、スマホにしかパスキー保存できていないケース(Entra ID用のパスキーをMicrosoft Authenticator の device-bound passkey として保存する運用など)あたりでは利用機会があるかもしれません。

