手机扫描电脑二维码使用 Passkey 登录时需要两个设备都连接谷歌服务器吗?

313 天前
 Explr

我用电脑在 webauthn.iopasskeys.io 上测试通行密钥,电脑上用 Chrome 120 和 Fireafox 121(目前最新版)。在电脑上选择使用移动设备,然后在安卓手机上扫码连接,使用安卓手机上保存的 Passkey 。

经过几次测试,不论什么浏览器,如果电脑用虚拟网卡的方式全局代理,手机也开代理,注册和认证流程可以顺利完成。如果电脑只给浏览器代理,或者设置系统代理,两台设备连不上,手机不开代理也连不上。

如果关闭电脑的蓝牙,显示 Passkey 的二维码前也会要求先打开蓝牙。我推测电脑和手机之间应该是用蓝牙传输数据的,那为什么还要两端都全局代理呢?有大佬用 iPhone/iPad 扫码试过吗?

2253 次点击
所在节点    程序员
14 条回复
Satelli
313 天前
扫码只需要蓝牙。
Google Chrome 只是可以通过手机上的 Chrome 唤起配对流程面去扫码而已,实际上还是蓝牙。
Passkey 是可以存在 Google 账号里并同步到其他 Android 或 ChromeOS 设备的,这种情况下可能是没连梯子导致网络请求失败?
Android 手机还支持作为硬件密钥,验证流程是很相似的,你得区分一下。
Explr
313 天前
@Satelli #1 WebAuthn.io 的注册参数是 User Verification: Preferred ,Attachment: All Supported ,Discoverable Credential: Preferred ,Attestation: None ,Registration Hint: []

确实是在 Google 密码管理器里看见这个 Passkey 了,大佬知道怎么设置 webauthn 的参数可以不依赖谷歌服务吗,我想给网站加上这个扫码登录的功能,但是要求两端都代理有点苛刻,尤其是电脑,光给浏览器代理还不行。
Satelli
313 天前
@Explr
电脑不需要代理的呀,所有数据都是浏览器通过蓝牙从你手机拿的。
我的意思是因为你的手机的 Passkey 是存在 Google 账号里的,需要先从里拿数据所以可能需要代理。
你好像唯独没有测试电脑不开代理,手机开代理的情况吧。
iOS 设备的 Passkey 是存在 iCloud Keychain 或其他密码管理器里的,不需要代理。
国行 Android 手机我不太清楚。
Explr
313 天前
测试过电脑不开代理手机开,也是不行的,手机是国行三星,这也是我奇怪的地方。而且电脑必须通过虚拟网卡让所有流量都走代理才行,只给浏览器设置代理或者设置 Windows 代理都是过一段时间后两端的认证各自超时。

还有就是两端开代理成功过一次以后,下次电脑会记住手机型号,可以直接选这个手机连接,不必扫码。我试过关上手机的 wifi 和蓝牙,然后两端开代理,电脑依然能把认证请求推送到手机上,估计肯定是走谷歌服务器通知了。

我还试过开代理扫码,在设备连接上以后,手机按指纹之前,断开电脑的代理,一样也会失败。不知道是不是扫码也过了谷歌服务器了。

@Satelli
cccer
313 天前
1. QC 验证时 BLE 蓝牙只是提供握手及接近度证明,后续通信是通过网络隧道完成,这个网络隧道是认证器提供的(本文中的 Google )。
2. Windows 需要代理是因为与认证器通信工作是由 Windows 完成的。
cccer
313 天前
记住设备这个功能也同理,在注册时双方已经提供了可信证明和网络隧道的地址,后续直接通过这个隧道通信就行。
jocover
313 天前
这东西其实就是 fido2 的验证模式,根据协议可以走蓝牙,nfc,和 USB hid ,不需要网络流量

我是用自己开发基于 esp32 的在 USB 模式下测试的,注册 webauthn.iopasskeys.io 都不需要代理
https://github.com/jocover/esp32_u2f
Explr
313 天前
@cccer #5 感谢大佬,请问有这个整体认证过程的标准文档或者介绍文档吗,我再研究研究。
cccer
313 天前
@Explr QR 验证属于混合传输,大概流程如下(细节可能有误):

1. 电脑通过二维码展示一个公钥和一个秘钥
2. 手机扫描后把通过秘钥加密后的网络隧道服务器和其他信息广播出去
3. 电脑收到广播后就拿到了网络隧道地址和必要信息,也同时验证了认证器就在附近
4. 后续电脑就通过这个网络隧道来和认证器通讯

参考: https://fidoalliance.org/specs/fido-v2.2-rd-20230321/fido-client-to-authenticator-protocol-v2.2-rd-20230321.html#sctn-hybrid
lslqtz
312 天前
看了看贴, 我在上此功能的时候使用 iOS 设备测试, 上线后才了解到部分 Android 用户报告 WebAuthn 不可用, 这可能是可能一种原因吧...
k332159915
273 天前
同为三星国行,请问下楼主知道是什么问题了嘛?
k332159915
273 天前
我发现一个问题 Passkey 是可以存在 Google 账号的,但是我头一天设置好了之后看到里面有,但是第二天再去看的时候就没有设个 passkey 的数据了。
Explr
273 天前
@k332159915 #11 参考#9 的回复,实际数据是通过网络传输的,电脑传输数据时需要走代理。
k332159915
273 天前
@Explr 三星国行好像 Google 服务阉割严重,唉,基本上连不上设备。passkey 基本上算残废的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1009930

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX