You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Apple公私钥认证时,如何查询设备上指定依赖方的Passkey?

能否查询设备上的Passkey公私钥列表?

不行,iOS系统出于隐私和安全保护,不允许应用直接查询设备上存储的Passkey凭证列表,哪怕只获取ID和依赖方ID这类元数据也不行。

为什么SecItemCopyMatching查不到?

Passkey并不存储在传统的钥匙串条目里,而是由系统的WebAuthn框架独立管理,SecItemCopyMatching仅能访问常规钥匙串项目(如密码、证书),无法获取Passkey相关条目,所以你用该API查不到结果是正常现象。

替代方案:间接判断当前设备是否有目标Passkey

虽然不能直接查询列表,但可以通过ASAuthorizationPublicKeyCredentialProvider的API间接判断:

  • 使用getCredentialState(forUserID:completion:)方法:传入服务器提供的用户ID,该方法会异步返回当前设备是否存在对应此用户ID和依赖方ID的Passkey。
  • 示例代码:
let provider = ASAuthorizationPublicKeyCredentialProvider(relyingPartyIdentifier: "你的依赖方ID")
provider.getCredentialState(forUserID: "服务器返回的用户ID") { state, error in
    switch state {
    case .authorized:
        // 当前设备存在该用户的Passkey,显示登录按钮
        DispatchQueue.main.async {
            self.showPasskeyLoginButton()
        }
    case .revoked, .notFound:
        // 不存在对应Passkey,隐藏按钮
        DispatchQueue.main.async {
            self.hidePasskeyLoginButton()
        }
    default:
        break
    }
}

注意事项

  • 该方法仅能针对已知用户ID查询,无法遍历设备上所有Passkey。
  • 如果用户未完成前置登录(服务器无用户ID),需先引导用户输入邮箱/手机号等标识,获取用户ID后再调用此方法判断。

内容的提问来源于stack exchange,提问作者Egg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 18:53:11