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

是否有Apple官方API可解除应用与用户Apple ID的绑定?

实现Apple ID应用绑定解除(Sign in with Apple 撤销授权)操作

你要实现的「Stop Using Apple ID」效果对应的是Sign in with Apple官方提供的令牌撤销接口,不需要用户手动跳转Apple管理页面,直接在Node.js(Express)后端调用即可完成用户和你应用的绑定解除。

前置准备

  • 你已经在Apple开发者后台开启了Sign in with Apple能力,掌握以下参数:team_id、client_id(你的应用Bundle ID/网页端服务ID)、key_id、开发者后台生成的Sign in with Apple私钥文件内容
  • 你存储了用户登录Apple时返回的refresh_token(或未失效的authorization_code)

实现步骤

1. 安装依赖

需要用到JWT生成库和HTTP请求库,执行:
npm install jsonwebtoken axios

2. 生成Apple接口所需的Client Secret

Apple所有开放接口都需要用JWT格式的Client Secret做鉴权,示例代码:

const jwt = require('jsonwebtoken');
const fs = require('fs');

// 读取你从Apple开发者后台下载的私钥文件
const privateKey = fs.readFileSync('./AuthKey_XXXXXX.p8').toString();

function generateAppleClientSecret() {
  const payload = {
    iss: '你的Team ID', // 苹果开发者后台右上角团队ID
    iat: Math.floor(Date.now() / 1000),
    exp: Math.floor(Date.now() / 1000) + 86400 * 180, // 最长有效期180天
    aud: 'https://appleid.apple.com',
    sub: '你的Client ID', // 比如com.xxx.yourapp
  };

  return jwt.sign(payload, privateKey, {
    algorithm: 'ES256',
    keyid: '你的Key ID', // 私钥对应的Key ID
  });
}

3. 调用撤销接口完成解绑

直接调用Apple的撤销令牌接口即可解除绑定,Express路由示例:

const axios = require('axios');
const express = require('express');
const router = express.Router();

router.post('/apple/revoke', async (req, res) => {
  try {
    // 从你的用户系统中取出对应用户的Apple refresh_token
    const userRefreshToken = req.user.appleRefreshToken;
    const clientSecret = generateAppleClientSecret();

    await axios.post('https://appleid.apple.com/auth/revoke', new URLSearchParams({
      client_id: '你的Client ID',
      client_secret: clientSecret,
      token: userRefreshToken,
      token_type_hint: 'refresh_token' // 如果你传的是authorization_code就填authorization_code
    }), {
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      }
    });

    // 撤销成功,清理你系统中该用户的Apple绑定信息
    res.status(200).json({ success: true, message: '解绑成功' });
  } catch (err) {
    console.error('Apple解绑失败', err.response?.data || err.message);
    res.status(500).json({ success: false, message: '解绑失败' });
  }
});

注意事项

  • 接口返回200即代表解绑成功,用户后续再用Apple ID登录你的应用时会触发全新的授权流程,你会拿到新的用户标识
  • 若接口返回invalid_token错误,说明你传入的token已失效,此时可以直接清理你本地的用户绑定数据,无需重复调用
  • 如果你没有存储用户的refresh_token,只能引导用户手动前往Apple ID管理页面操作,无法通过API完成解绑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:15:04