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
相关产品推荐
相关产品推荐

