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

在SwiftUI iOS应用中实现SignInWithApple后的凭证存储疑问

Sign in with Apple 凭证处理方案(适配现有JWT架构)

核心结论

不需要在iOS客户端留存authorizationCode和identityToken,你的MySQL数据库只需要存储苹果提供的**唯一用户标识符(userIdentifier)**即可,但这两个凭证必须在首次认证时传给后端完成合法性验证。


各凭证的作用与处理方式

  • userIdentifier(必须存储)
    这是苹果为用户分配的永久唯一标识,只要用户不删除你的应用或主动撤销授权,这个值不会变更。它是你在数据库中关联苹果登录用户的核心字段,建议在现有用户表新增apple_user_id字段来存储,实现与邮箱密码账号的关联。

  • authorizationCode(一次性使用,无需存储)
    这是苹果签发的一次性授权码,作用是让你的后端向苹果服务器验证本次登录请求的合法性。后端需要用这个码调用苹果的token接口换取验证信息,验证通过后该码立即失效,客户端不需要留存,直接传给后端即可。

  • identityToken(仅用于首次信息同步,无需存储)
    这是JWT格式的身份令牌,包含用户的基础信息(首次登录时会返回邮箱、姓名),后端可以解析它获取用户信息,同时验证签名确保令牌由苹果签发。这个令牌有过期时间,且后续登录可能不会返回完整信息,所以客户端不需要存储,直接传给后端处理。


结合现有邮箱密码/JWT架构的流程

首次登录(用户首次用苹果账号登录)

  1. 客户端获取ASAuthorizationAppleIDCredential后,将userIdentifier、authorizationCode、identityToken(若有姓名/邮箱)一起发送到你的后端API。
  2. 后端调用苹果验证接口,用authorizationCode验证登录合法性。
  3. 验证通过后,后端检查数据库是否存在userIdentifier对应的用户:
    • 不存在:用identityToken中的信息(或邮箱)创建新用户,将userIdentifier存入用户表。
    • 已存在:直接关联到该用户记录。
  4. 后端生成你自己的JWT访问/刷新令牌返回给客户端,后续客户端用这个令牌与API交互。

后续登录(用户再次用苹果账号登录)

  1. 客户端获取ASAuthorizationAppleIDCredential后,仅需将userIdentifier传给后端(也可附带identityToken让后端快速验证身份)。
  2. 后端根据userIdentifier找到对应用户,直接返回你的JWT令牌即可。

关键注意事项

  • 绝对不要在客户端存储authorizationCode和identityToken,前者一次性失效,后者有过期风险且存储在本地存在安全隐患。
  • 后端必须完成苹果凭证的验证流程,不能仅信任客户端传来的userIdentifier,否则会存在伪造登录请求的风险。
  • 监听苹果授权状态变化:通过ASAuthorizationAppleIDProvider检查用户是否撤销了应用授权,若发生变更,需及时更新数据库中的用户状态或提示用户重新授权。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:43:13