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

如何通过Azure B2C获取Sign in with Apple授权码(Ionic应用场景)

解决方案:Azure B2C + Sign in with Apple 令牌获取问题

核心结论

你的问题根源在于Azure B2C的配置缺失,不需要转换idp_access_token,只需调整B2C的身份提供者设置和用户流/自定义策略,就能获取Apple的id_token和授权码,进而支持令牌刷新、撤销及账号删除操作。


1. 调整Azure B2C中Sign in with Apple的配置

  • 开启授权码类型:在Azure B2C的Sign in with Apple身份提供者配置页,选择Authorization Code授权类型,同时请求的Scope需包含openid、email;如需离线访问能力,需添加offline_access以获取Apple的refresh token。
  • 配置输出声明:在你的B2C用户流(或自定义策略)中添加自定义输出声明,将Apple返回的id_token和授权码(code)映射为B2C返回给应用的字段:
    1. 进入用户流的「应用程序声明」页面;
    2. 添加自定义声明(例如命名为idp_apple_id_token、idp_apple_code);
    3. 在身份提供者的声明映射中,将Apple返回的对应字段绑定到这些自定义声明。

2. 配置ionic-appauth获取额外声明

  • 明确请求Scope:在AuthConfiguration中,确保包含Azure B2C所需的Scope(如openid、offline_access)以及Apple要求的Scope,触发B2C从Apple获取完整的令牌和授权码。
  • 提取自定义声明:登录成功后,通过ionic-appauth的用户信息接口或令牌解析逻辑,提取B2C返回的自定义声明。示例代码:
    const user = await authService.getUserInfo();
    const appleIdToken = user.idTokenClaims['idp_apple_id_token'];
    const appleAuthCode = user.idTokenClaims['idp_apple_code'];
    

3. 令牌刷新与账号删除的处理

  • 令牌刷新:若无需直接操作Apple的令牌,可直接使用Azure B2C返回的refresh_token刷新应用的access token;若必须操作Apple的令牌,需确保B2C配置中请求了offline_access,通过自定义声明获取Apple的refresh token。
  • 账号删除:调用Apple的账号删除API时,直接使用B2C返回的idp_apple_id_token或idp_apple_code即可,无需转换idp_access_token。

4. 关键检查点

  • 确认Apple开发者后台的**服务ID(Service ID)**与Azure B2C中配置的客户端ID完全一致,且redirect URI完全匹配;
  • 确保ionic-appauth使用Authorization Code Flow(而非Implicit Flow),因为Implicit Flow不会返回授权码;
  • 使用ionic-appauth的最新稳定版本,避免兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:35:26