多iOS应用(不同App ID)共享服务器实现Apple Sign In配置咨询
同一Django服务器支持多应用Apple Sign In配置方案
Apple开发者后台配置调整
- 扩展现有密钥的App ID关联:进入「Certificates, Identifiers & Profiles」→「Keys」,找到应用A使用的密钥,点击编辑后在「Primary App ID」区域选择「Add Additional App IDs」,将应用B的App ID添加进去。保存后,该密钥即可同时用于两款应用的Sign In验证。
- 重新检查App ID分组配置:若之前尝试的「与现有主App ID分组」未生效,需确认两款应用均已加入同一个App Group:
- 在「Identifiers」→「App Groups」中创建或选择目标分组;
- 分别进入应用A和B的App ID配置页面,勾选「App Groups」并关联该分组;
- 确保两款应用的「Sign In with Apple」功能均处于启用状态,且配置中选择了对应的App Group。
- (若使用Services ID)为应用B配置独立Services ID:如果你的Sign In流程依赖Services ID,需为B创建新的Services ID,启用「Sign In with Apple」并关联B的App ID,同时确保该Services ID的回调URL与服务器端接收地址一致。
Django服务器端代码修改
核心是调整Apple ID Token的验证逻辑,支持多应用的受众(aud)校验:
from apple_signin import verify from jose import JWTError def verify_apple_token(token): # 维护允许的应用ID列表 allowed_client_ids = ["com.yourcompany.appA", "com.yourcompany.appB"] team_id = "YOUR_APPLE_TEAM_ID" key_id = "YOUR_APPLE_KEY_ID" private_key = "YOUR_PRIVATE_KEY_CONTENT" for client_id in allowed_client_ids: try: # 逐个尝试验证token是否匹配当前应用ID payload = verify( id_token=token, client_id=client_id, team_id=team_id, key_id=key_id, private_key=private_key ) return payload except JWTError: continue # 所有应用ID验证失败时抛出异常 raise ValueError("Token validation failed for all configured app IDs")
- 注意:若使用自定义JWT解析库(而非
apple_signin),需确保在验证aud字段时,检查其是否在allowed_client_ids列表中,而非仅匹配单一值。 - 回调接口适配:如果两款应用的Sign In回调逻辑有差异,可通过解析token中的
aud字段,区分处理不同应用的后续流程(如用户绑定、会话创建等)。
排查要点
- 若之前分组未生效,优先检查密钥是否已关联应用B的App ID——这是跨应用共享密钥的核心前提;
- 测试时捕获token验证的具体错误(如
invalid_aud、invalid_kid),根据错误定位配置疏漏; - 确认应用B的包名/签名与Apple后台配置的App ID完全一致,避免因ID不匹配导致验证失败。
内容的提问来源于stack exchange,提问作者Olushola Oyinloye
相关产品推荐
相关产品推荐

