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

Apple Social Login是否存在官方用户信息获取端点URL?

Apple 自定义登录第三步获取用户信息方案

和Google不同,Apple OAuth 2.0 流程没有单独提供用于查询用户信息的公开端点,用户信息的获取逻辑分为两种场景处理:

场景1:首次授权登录(用户第一次用Apple ID登录你的应用)

  • 第一步构造授权请求时,必须显式指定scope参数为name email(如果需要这两类信息的话)
  • 用户在Apple授权页同意授权后,Apple会在授权码回调的请求参数里直接附带user字段,该字段为JSON格式,包含你请求的用户名称、邮箱信息,注意这个字段只会在首次授权的回调里返回一次,后续重授权不会再返回,需要你自行存储到Salesforce的用户体系中

场景2:非首次授权登录 / 无scope请求的登录

  • 第二步用授权码调用Apple的token端点https://appleid.apple.com/auth/token时,返回结果里会包含id_token字段,该字段是符合JWT规范的加密字符串
  • 你只需要在Salesforce端对id_token做JWT验签和解码,就可以拿到标准的用户标识信息,包括:
    • sub:Apple用户的唯一标识,等效于Google的用户ID,可作为用户绑定的主键使用
    • email:用户的邮箱地址(如果用户选择隐私代理的话会是Apple生成的随机转发邮箱)
    • email_verified:邮箱是否验证的标记
    • 其他可选字段比如is_private_email、auth_time等

Salesforce Apex 解码参考代码

// 第二步调用Apple token接口拿到返回结果后,提取id_token
String idToken = (String)tokenResponse.get('id_token');
// 拆分JWT的payload段
List<String> jwtParts = idToken.split('\\.');
String payloadJson = EncodingUtil.base64Decode(jwtParts[1]).toString();
Map<String, Object> userInfo = (Map<String, Object>)JSON.deserializeUntyped(payloadJson);
// 提取用户唯一标识
String appleUserId = (String)userInfo.get('sub');
// 提取邮箱
String userEmail = (String)userInfo.get('email');

注意:解码id_token之前建议先做JWT签名校验,避免伪造请求,Apple的公钥可以从Apple的公开JWKS端点获取后缓存到Salesforce自定义元数据里使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:27:03