iOS设备如何检查是否存储了特定域名的Passkey?
检查设备是否存储对应域名的Passkey方法
- 核心逻辑:利用WebAuthn API的静默检查能力,在不触发系统弹窗的前提下,判断设备是否保存了目标域名的Passkey。
- 具体实现代码:
async function hasPasskeyForDomain() { try { const options = { publicKey: { rpId: "your-domain.com", // 替换为实际目标域名 userVerification: "preferred", mediation: "silent" } }; const credential = await navigator.credentials.get(options); return credential !== null; } catch (error) { // 无匹配Passkey或其他异常时返回false return false; } } // 调用示例 hasPasskeyForDomain().then(hasPasskey => { if (hasPasskey) { // 存在Passkey,触发正常登录弹窗 navigator.credentials.get({ publicKey: { rpId: "your-domain.com", userVerification: "preferred" } }); } else { // 无Passkey,不展示Passkey登录选项 console.log("当前设备无该域名的Passkey"); } });
- 关键参数说明:
rpId:必须与创建Passkey时的rp.id一致,填写不带协议和端口的纯域名。mediation: "silent":核心参数,让浏览器后台静默检查,不会弹出系统选择窗口,有匹配Passkey则返回凭证,否则抛出错误。
- 注意事项:
- 必须在HTTPS环境下运行(localhost开发环境不受限制)。
- 主流浏览器(Chrome、Safari、Edge)均支持该特性,建议做兼容性测试。
- 若设备存在多个对应域名的Passkey,静默模式会自动返回最近使用的凭证。
内容的提问来源于stack exchange,提问作者Timur Mustafaev
相关产品推荐
相关产品推荐

