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

Unity移动端调用Apple撤销授权Token REST API无效问题咨询

Unity移动端Sign In With Apple Token撤销实现方案

亲测可稳定实现,绝大多数开发者遇到「接口返回200但Token未撤销」的问题,都是踩了苹果文档没明确标注的隐式校验坑,不是接口本身能力缺失。


先讲导致200假成功的3个核心坑

  • 传错了待撤销的Token类型:直接拿登录回调里的短期identityToken(JWT格式的用户标识令牌)或者一次性authorizationCode调用撤销接口,苹果不会返回参数错误,会直接回200但不执行任何操作。撤销接口只接受登录流程中签发的refresh_token作为入参。
  • client_secret生成不符合隐式规则:苹果对JWT格式的客户端密钥校验极严,只要字段填错、有效期超长、签名算法不对,都会静默返回200不执行逻辑,没有任何错误提示。
  • 本地登录态缓存未清理:Unity侧登录管理器如果缓存了之前的授权状态,撤销后没有主动清空,重启后读本地缓存自然会显示已授权,和接口是否生效无关。

具体落地实现步骤

1. 前置依赖准备

直接用苹果官方维护的Unity Sign In With Apple插件接入基础登录能力,不要用第三方未经验证的野插件,避免回调参数取值错误。

注意:涉及密钥签名、Token请求、撤销调用的逻辑必须放在自有业务服务端实现,绝对不要把苹果私钥打包进Unity客户端,否则会有私钥泄露、被苹果封禁Sign In With Apple权限的风险。

2. 登录阶段提前存好撤销所需的refresh_token

用户首次苹果登录成功后,按下面的流程拿refresh_token:

  • 从Unity端登录回调中取出一次性的authorizationCode,这个码有效期只有5分钟,拿到立刻传给服务端,不要本地存储。
  • 服务端生成符合要求的client_secret,这是ES256签名的JWT,必填字段如下,错一个就会假成功:
    • iss:苹果开发者账号对应的Team ID
    • iat:当前时间的UNIX时间戳(单位秒)
    • exp:iat + 1800以内,也就是这个密钥最长有效期30分钟,写超过直接无效
    • aud:固定值https://appleid.apple.com
    • sub:你在开发者后台配置Sign In With Apple时创建的Services ID(注意不是App的Bundle ID)
  • 服务端调用苹果/auth/token接口换refresh_token,参数如下:
    client_id: 你的iOS App的Bundle ID(注意这里和生成client_secret时的sub值不一样,填错也会假成功)
    client_secret: 上一步生成的JWT密钥
    code: Unity端传上来的authorizationCode
    grant_type: 固定值authorization_code
    
  • 接口返回的refresh_token是长期有效凭证,存在服务端和用户账号做绑定,不要下发到客户端存储。

3. 账号删除时执行Token撤销

用户触发账号删除流程时,服务端按下面的逻辑调用撤销接口:

  • 重新生成新的有效期内的client_secret,不要用之前缓存的旧密钥。
  • 调用苹果/auth/revoke接口,参数必须填全:
    client_id: 你的iOS App的Bundle ID
    client_secret: 新生成的JWT密钥
    token: 该用户绑定存储的refresh_token
    token_type_hint: 固定值refresh_token(这个参数必须加,不加苹果会默认按access_token解析,解析失败就静默返回200不操作)
    
  • 接口返回200时即为撤销成功。

4. Unity客户端侧收尾

服务端返回撤销成功的响应后,Unity侧要立刻做两个操作:

  • 调用登录插件的退出登录方法,主动向iOS系统请求更新当前App的苹果授权状态
  • 清空本地所有和苹果登录相关的缓存,包括存在PlayerPrefs里的userID、identityToken、本地登录状态标记等,不要依赖重启自动清理。

有效性验证方法

不要靠本地缓存的登录状态判断是否撤销成功,撤销完成后调用插件提供的GetCredentialState方法查询授权状态,如果返回Revoked就代表Token已经真正失效,此时再重启App就不会出现已授权的提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:48:34