使用Apple Sign in注册Unlimited VPN SDK社交账号失效问题咨询
问题解答
1. 你的实现存在两处明显错误
- 参数映射错误:你将苹果返回的
identityToken错误填入了SDK的accessToken字段,同时本该填identityToken的idToken字段你传了nil。SDK注释标注的「idToken仅谷歌使用」是注释疏漏,对接苹果登录时需要将identityToken传入idToken参数。 - 认知错误:Sign in with Apple 的客户端流程本身不会直接返回标准OAuth2的
accessToken给前端,你无法从ASAuthorizationAppleIDCredential对象中直接获取到该字段。苹果仅会给客户端返回身份凭证identityToken和授权码authorizationCode,accessToken只能通过服务端调用苹果接口兑换得到。
你遇到的「bad gateway」报错是SDK后台验证参数时,将你传入的identityToken当做accessToken去苹果校验失败触发的网关错误。
2. 修复方案
2.1 优先方案:修正参数映射即可
绝大多数第三方登录SDK对接苹果登录时仅校验identityToken,直接修正你的传参逻辑即可:
private func registerUsingAppleID(appleIDCredential: ASAuthorizationAppleIDCredential) { guard let identityTokenData = appleIDCredential.identityToken, let identityTokenString = String(data: identityTokenData, encoding: .utf8) else { return } KSVPNUFacade.default.registerSocial(withLogin: appleIDCredential.email, serviceType: VPNUSocialServiceTypeApple, accessToken: nil, // 苹果登录客户端侧无该字段 refreshToken: nil, idToken: identityTokenString, // 传入苹果返回的identityToken marketingEmails: true, partnerId: ThirdVpnConfig.getUnlimitedVPNPartnerID()) { longAccessToken, data, error in // 正常回调 } }
2.2 若SDK强制要求传入accessToken
需要通过服务端兑换流程获取:
- 客户端将拿到的
authorizationCode传给自己的业务后端 - 后端使用苹果开发者账号生成的客户端密钥、client_id等参数,调用苹果官方令牌接口兑换得到accessToken,再返回给客户端
- 客户端拿到兑换后的accessToken传入SDK对应字段即可
内容的提问来源于stack exchange,提问作者Arnab Ahamed Siam
相关产品推荐
相关产品推荐

