本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
添加以社交身份提供者身份使用 Apple 登录
注意
上次通过提供商控制台进行验证的时间为 2026 年 10 月 2 日。Apple 步骤使用 Apple 开发者账户中的证书、标识符和配置文件
使用 Apple 登录需要四个构件:应用程序 ID、服务 ID(您的 Amazon Cognito 客户端 ID)、私钥和您的团队 ID。然后,您将 Apple 作为身份提供商 (IdP) 添加到您的用户池中。必须先启用托管登录。
创建你的 Apple 标识符和密钥
创建 Apple 工件
-
在 “证书、标识符和配置文件” 中,创建应用程序 ID(依次是标识符,+,然后是应用程序 ID,然后是应用程序),然后启用 “使用 Apple 登录” 功能。
-
创建服务 ID(标识符,然后是 +,然后是服务 ID)。例如,输入描述和反向域标识符。
com.example.auth.cognito此标识符是您的亚马逊 Cognito 服务 ID(客户端 ID)。 -
选择服务 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返回自定义域名的网址。
-
-
创建私钥(密钥,然后是 +),启用 “使用 Apple 登录”,然后下载
.p8文件。您只能下载一次。记录密钥 ID。 -
在 “成员资格” 页面上记录您的 10 个字符的球队 ID。将 Apple 添加到用户池时,您需要输入服务 ID、团队 ID、密钥 ID 和私钥。
将 Apple 添加到你的用户池
要将 Apple 添加为 IdP,请在 Amazon Web Services 管理控制台
-
在 Amazon Cognito 控制台
中,选择您的用户池,然后选择社交和外部提供商,然后选择添加身份提供商,然后选择 “使用 Apple 登录”。 -
输入服务 ID、团队 ID、密钥 ID 和私钥。Amazon Cognito 使用私钥为您生成客户端密钥。
-
对于授权范围,请输入
email name。email仅在不需要用户名时使用。 -
映射
email到email和映射sub到您的用户名属性。Apple 仅在首次登录时返回用户的姓名,因此,如果您将其映射,请将其捕获。 -
选择 “添加身份提供商”,然后在应用程序客户端上启用 Apple。
测试用 Apple 登录
打开您的托管登录页面,然后选择 “继续使用 Apple”。同时测试 “共享我的电子邮件” 和 “隐藏我的电子邮件”。
检查点
浏览器使用授权码/oauth2/idpresponse返回您的应用程序。用户与SignInWithApple提供者一起出现在您的用户池中,并且sub. “共享我的电子邮件” 运行显示的是真实的电子邮件;“隐藏我的电子邮件” 运行显示一个@privaterelay.appleid.com地址。invalid_client错误几乎总是意味着客户端密钥 JWT 已过期,或者服务 ID 或返回 URL 不完全匹配/oauth2/idpresponse。
Apple-specific 陷阱
- 客户端密钥是已过期的 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基于链接的方式,并在任何合并逻辑之前对字符串值进行标准化处理。