WebAuthn技术问题:能否筛选Passkey认证器?
仅允许Google、Apple、Microsoft Passkey认证器的实现方案
可以实现,但需要调整WebAuthn请求参数并结合后端验证来筛选认证器,以下是具体步骤:
当前参数的问题
你当前设置的authenticatorAttachment: "platform"仅限制使用平台认证器,但像1Password这类第三方应用也可以注册为平台认证器,因此仍会出现在选项列表中。要进一步限制到指定厂商,需要通过认证器的唯一标识符(AAGUID)来筛选。
具体实现步骤
1. 修改WebAuthn创建凭证的参数
调整请求中的attestation和extensions参数,以便获取认证器的元数据:
{ "challenge": "nhkQXfE59Jb97VyyNJkvDiXucMEvltduvcrDmGrODHY", "rp": {"name": "CredMan App Test", "id": "credential-manager-app-test.glitch.me"}, "user": {"id": "2HzoHm_hY0CjuEESY9tY6-3SdjmNHOoNqaPDcZGzsr0", "name": "helloandroid@gmail.com", "displayName": "helloandroid@gmail.com"}, "pubKeyCredParams": [{"type": "public-key", "alg": -7}, {"type": "public-key", "alg": -257}], "timeout": 1800000, "attestation": "direct", "excludeCredentials": [], "authenticatorSelection": { "authenticatorAttachment": "platform", "requireResidentKey": true, "residentKey": "required", "userVerification": "required" }, "extensions": { "credProps": true } }
- 将
attestation从"none"改为"direct":让认证器返回包含自身元数据的证明语句,从中可以提取AAGUID。 - 添加
extensions.credProps: true:获取额外的认证器属性,辅助筛选。
2. 后端验证AAGUID
在后端处理凭证创建请求时,从返回的attestationObject中解析出AAGUID,只允许以下指定厂商的认证器:
- Google Play Services认证器:
adb88061-1801-4090-8547-50b85e887b36 - Apple平台认证器:
00000000-0000-0000-0000-000000000000(Apple不公开具体AAGUID,使用通用全0值) - Microsoft Windows Hello:
f8a0114f-36e8-4d4b-9494-4beabb3c3c12
3. 前端显示说明
目前WebAuthn标准无法直接在前端隐藏第三方平台认证器的选项,但通过后端验证AAGUID,可以确保只有符合要求的认证器创建的凭证被系统接受,从而达到实际的限制效果。
内容的提问来源于stack exchange,提问作者Ильсур Ибрагимов
相关产品推荐
相关产品推荐

