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

iOS 17下如何从第三方密钥管理器1Password获取rawClientDataJSON?

第三方密码管理器(如1Password)获取rawClientDataJSON的解决方案

你遇到的问题本质是用错了凭据类——ASAuthorizationPlatformPublicKeyCredentialAssertion/ASAuthorizationPlatformPublicKeyCredentialRegistration是苹果专门给iCloud密钥链设计的平台凭据类,1Password这类第三方密码管理器的密钥属于跨平台WebAuthn凭据,根本不会通过这些类返回数据,所以你拿到的字段是空的。

正确的获取方式

处理授权结果时,要判断凭据的实际类型,用通用的WebAuthn凭据类来提取rawClientDataJSON:

代码示例

func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
    // 处理登录流程的断言
    if let crossPlatformAssertion = authorization.credential as? ASAuthorizationPublicKeyCredentialAssertion {
        let rawClientData = crossPlatformAssertion.rawClientDataJSON
        // 将该数据传递至服务器
    }
    // 处理注册流程的凭据
    else if let crossPlatformRegistration = authorization.credential as? ASAuthorizationPublicKeyCredentialRegistration {
        let rawClientData = crossPlatformRegistration.rawClientDataJSON
        // 将该数据传递至服务器
    }
    // 如需兼容iCloud密钥,保留以下可选代码
    else if let platformAssertion = authorization.credential as? ASAuthorizationPlatformPublicKeyCredentialAssertion {
        let rawClientData = platformAssertion.rawClientDataJSON
    }
}

额外注意事项

  • 不要在请求凭据时限制仅获取平台凭据:检查ASAuthorizationPublicKeyCredentialProvider的配置,别把platformCredential设为true,否则会过滤掉1Password这类第三方凭据。
  • 所有第三方密码管理器的WebAuthn凭据都会走通用的ASAuthorizationPublicKeyCredential*类,统一用这个分支处理就不会有问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 00:38:22