

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 添加以社交身份提供者身份使用 Apple 登录
<a name="cognito-user-pools-social-idp-apple"></a>

**注意**  
**上次通过提供商控制台进行验证的时间为** 2026 年 10 月 2 日。Apple 步骤使用 Apple 开发者账户中的[证书、标识符和配置文件](https://developer.apple.com/account/resources)。您必须具有账户持有人或管理员角色。

使用 Apple 登录需要四个构件：应用程序 ID、服务 ID（您的 Amazon Cognito 客户端 ID）、私钥和您的团队 ID。然后，您将 Apple 作为身份提供商 (IdP) 添加到您的用户池中。必须先启用托管登录。

## 创建你的 Apple 标识符和密钥
<a name="social-idp-apple-register"></a>

**创建 Apple 工件**

1. 在 “**证书、标识符和配置文件**” 中，创建**应用程序 ID**（依次是标识符，**\+**，然后是**应用程序 ID**，然后是**应用程序**），然后启用 “**使用 Apple 登录**” 功能。

1. 创建**服务 ID**（标识符，然后是 **\+**，然后是**服务 ID**）。例如，输入描述和反向域标识符。`com.example.auth.cognito`此标识符是您的亚马逊 Cognito **服务 ID**（客户端 ID）。

1. 选择服务 ID，启用 “**使用 Apple 登录**”，然后选择 “**配置**”。选择您的主应用程序 ID，然后输入网址：
   + **域名和子域名**（仅限主机，无方案）：`<your-prefix>.auth.<region>.amazoncognito.com`用于默认 Amazon Cognito 域名`auth.example.com`或自定义域。
   + **返回网址**（带有:的完整网址`https://`）`https://<your-prefix>.auth.<region>.amazoncognito.com/oauth2/idpresponse`，或者`https://auth.example.com/oauth2/idpresponse`返回自定义域名的网址。

1. 创建私钥（密钥，然后是 **\+**），启用 “**使用 Apple 登录**”，然后下载`.p8`文件。您只能下载一次。记录密**钥 ID**。

1. 在 “成员资格” 页面上记录您的 10 个字符的**球队 ID**。将 Apple 添加到用户池时，您需要输入服务 ID、团队 ID、密钥 ID 和私钥。

## 将 Apple 添加到你的用户池
<a name="social-idp-apple-configure"></a>

**要将 Apple 添加为 IdP，请在 Amazon Web Services 管理控制台**

1. 在 [Amazon Cognito 控制台](https://console.amazonaws.cn/cognito/home)中，选择您的用户池，然后选择**社交和外部提供商**，然后选择**添加身份提供商**，然后选择 “**使用 Apple 登录**”。

1. 输入**服务 ID**、**团队 ID**、**密钥 ID** 和**私钥**。Amazon Cognito 使用私钥为您生成客户端密钥。

1. 对于**授权范围**，请输入`email name`。`email`仅在不需要用户名时使用。

1. 映射`email`到`email`和映射`sub`到您的用户名属性。Apple 仅在首次登录时返回用户的姓名，因此，如果您将其映射，请将其捕获。

1. 选择 “**添加身份提供商**”，然后在应用程序客户端上启用 Apple。

## 测试用 Apple 登录
<a name="social-idp-apple-test"></a>

打开您的托管登录页面，然后选择 “**继续使用 Apple**”。同时测试 “**共享我的电子邮件**” 和 **“隐藏我的电子邮件**”。

**检查点**  
浏览器使用授权码`/oauth2/idpresponse`返回您的应用程序。用户与**SignInWithApple**提供者一起出现在您的用户池中，并且`sub`. “共享我的电子邮件” 运行显示的是真实的电子邮件；“隐藏我的电子邮件” 运行显示一个`@privaterelay.appleid.com`地址。`invalid_client`错误几乎总是意味着客户端密钥 JWT 已过期，或者服务 ID 或返回 URL 不完全匹配`/oauth2/idpresponse`。

## Apple-specific 陷阱
<a name="social-idp-apple-pitfalls"></a>

客户端密钥是已过期的 JWT  
Apple 的客户机密不是静态字符串。这是一款最长使用寿命为六个月（15,77.7万秒）的 ES256-signed 智威汤逊，当它到期时，Apple的登录会中断并且没有警告。`invalid_client`在此处描述的配置中，您向 Amazon Cognito 提供私钥（以及服务 ID、团队 ID 和密钥 ID），然后 Amazon Cognito 会根据该密钥生成客户端密钥 JWT，您无需粘贴预先构建的密钥。在 Apple 注册的私钥在 IdP 配置中保持有效且最新；如果您撤销或替换 Apple 密钥，请使用新密钥更新 IdP（例如，使用`UpdateIdentityProvider`）。

私人中继电子邮件和账户关联  
当用户选择 **“隐藏我的电子邮件**” 时，Apple 会返回一个`@privaterelay.appleid.com`地址而不是真实地址。此地址不同于同一个人与其他提供商使用的电子邮件地址，因此，当 Apple 参与时，请勿通过电子邮件将不同身份提供商的账户关联起来，而是由提供商进行链接。`sub`要将邮件发送到中继地址，请**在 “使用 Apple 登录电子邮件通信**” 下注册您的发送域。

email\_verified 类型和托管账户  
Apple 的`email_verified`声明可以以字符串`"true"`或布尔值`true`的形式出现，两者兼而有之。对于消费者 Apple 账户来说，情况总是如此。对于 Apple at Work & School（托管）账户，这可能是错误的。首选`sub`基于链接的方式，并在任何合并逻辑之前对字符串值进行标准化处理。