Sign in with Apple(身份池) - Amazon Cognito
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

Sign in with Apple(身份池)

Amazon Cognito 与 Sign in with Apple 集成,以针对移动应用程序和 Web 应用程序用户提供联合身份验证。此节介绍如何使用 Sign in with Apple 作为身份提供商来注册和设置应用程序。

将 Sign in with Apple 作为身份验证提供商添加到身份池的过程包括两个步骤。首先在应用程序中集成 Sign in with Apple,然后在身份池中配置 Sign in with Apple。

设置 Sign in with Apple

要将 Sign in with Apple 配置为身份提供商,您必须向 Apple 注册您的应用程序才能接收客户端 ID。

  1. 创建 Apple 开发人员账户

  2. 使用 Apple 凭证登录

  3. 在左侧导航窗格中,选择 Certificates, IDs & Profiles (证书、ID 和配置文件)

  4. 在左侧导航窗格中,选择Identifiers (标识符)

  5. Identifiers (标识符) 页面上,选择 + 图标。

  6. Register a New Identifier (注册新标识符) 页面上,选择 App IDs (应用程序 ID),然后选择 Continue (继续)

  7. Register an App ID (注册应用程序 ID) 页面上,执行以下操作:

    1. Description (描述) 下方,键入描述。

    2. Bundle ID (服务包 ID) 下,键入标识符。记下此服务包 ID,因为您需要此值才能将 Apple 配置为身份池中的提供商。

    3. Capabilities (功能) 下方,选择 Sign In with Apple (使用 Apple 登录),然后选择 Edit (编辑)

    4. Sign in with Apple: App ID Configuration (使用 Apple 登录:应用程序 ID 配置) 页面上,为您的应用程序选择适当的设置,然后选择 Save (保存)

    5. 选择继续

  8. Confirm your App ID (确认您的应用程序 ID) 页面上,选择 Register (注册)

  9. 如果要将 Sign in with Apple 与本机 iOS 应用程序集成,请继续执行步骤 10。步骤 11 适用于您希望与 Sign in with Apple JS 集成的应用程序。

  10. Identifiers (标识符) 页面上,在页面右侧的 App IDs (应用程序 ID) 上暂停。选择 Services IDs (服务 ID),然后选择 plus + (加号 +) 图标。

  11. Register a New Identifier (注册新标识符) 页面上,选择 Services IDs (服务 ID),然后选择 Continue (继续)

  12. Register an Services ID (注册服务 ID) 页面上,执行以下操作:

    1. Description (描述) 下方,键入描述。

    2. Identifier (标识符) 下方,键入标识符。记下服务 ID,因为您需要此值才能将 Apple 配置为身份池中的提供商。

    3. 选择 Sign In with Apple (使用 Apple 登录),然后选择 Configure (配置)

    4. Web Authentication Configuration (Web 身份验证配置) 页面上,选择 Primary App ID (主应用程序 ID)。在 Website URL’s (网站 URL) 下,选择 + 图标。对于 Domains and Subdomains (域和子域),输入应用程序的域名。在 Return URL (返回 URL) 中,输入授权在进行 Sign in with Apple 身份验证后重定向到的回调 URL。

    5. 选择 Next (下一步)

    6. 选择 Continue (继续),然后选择 Register (注册)

  13. 在左侧导航窗格中,选择 Keys (密钥)

  14. Keys (密钥) 页面上,选择 + 图标。

  15. Register a New Key (注册新密钥) 页面上,执行以下操作:

    1. Key Name (密钥名称) 下方,键入密钥名称。

    2. 选择 Sign In with Apple (使用 Apple 登录),然后选择 Configure (配置)

    3. Configure Key (配置密钥) 页面上,选择 Primary App ID (主应用程序 ID),然后选择 Save (保存)

    4. 选择 Continue (继续),然后选择 Register (注册)

注意

要将 Sign in with Apple 与本机 iOS 应用程序集成,请参阅通过 Sign in with Apple 实施用户身份验证

要在本机 iOS 以外的平台中集成 Sign in with Apple,请参阅 Sign in with Apple J

在 Amazon Cognito 联合身份控制台中配置外部提供商

使用以下过程可以配置外部提供商。

  1. Amazon Cognito 控制台主页中选择 Manage Identity Pools (管理身份池)

  2. 选择想要针对其启用 Apple 作为外部提供商的身份池的名称。

  3. 在控制面板的右上角,选择 Edit identity pool (编辑身份池)

  4. 向下滚动并选择身份验证提供商以将其展开。

  5. 选择 Apple 选项卡。

  6. 输入从 https://developer.apple.com 获得的服务包 ID。然后选择 Save changes (保存更改)

  7. 如果您在本机 iOS 应用程序中使用 Sign in with Apple,请输入您从 developer.apple.com 获得的 BundleID。或者,如果您在 Web 或其他应用程序中使用 Sign in with Apple,请输入服务 ID。然后选择 Save changes (保存更改)

在 Amazon Cognito 联合身份 CLI 中以 Sign in with Apple 作为提供商的示例

此示例以 Sign in with Apple 作为身份提供商创建一个名为 MyIdentityPool 的身份池。

aws cognito-identity create-identity-pool --identity-pool-name MyIdentityPool --supported-login-providers appleid.apple.com="sameple.apple.clientid"

有关更多信息,请参阅创建身份池

生成 Amazon Cognito 身份 ID

此示例生成(或检索)Amazon Cognito ID。这是一个公有 API,因此您不需要任何凭证即可调用此 API。

aws cognito-identity get-id --identity-pool-id SampleIdentityPoolId --logins appleid.apple.com="SignInWithAppleIdToken"

有关更多信息,请参阅 get-id

获取 Amazon Cognito 身份 ID 的凭证

此示例返回用于提供的身份 ID 和 Sign in with Apple 登录的凭证。这是一个公有 API,因此您不需要任何凭证即可调用此 API。

aws cognito-identity get-credentials-for-identity --identity-id SampleIdentityId --logins appleid.apple.com="SignInWithAppleIdToken"

有关更多信息,请参阅 get-credentials-for-identity

使用 Sign in with Apple:Android

Apple 不提供支持 Sign in with Apple for Android 的开发工具包。您可以改为在 Web 视图中使用 Web 流。

Sign in with Apple 使用会话对象来跟踪其状态。Amazon Cognito 使用来自此会话对象的 ID 令牌来对用户进行身份验证、生成唯一标识符,并根据需要授予用户对其他 AWS 资源的访问权限。

@Override public void onSuccess(Bundle response) { String token = response.getString("id_token"); Map<String, String> logins = new HashMap<String, String>(); logins.put("appleid.apple.com", token); credentialsProvider.setLogins(logins); }

使用 Sign in with Apple:iOS - Objective-C

Apple 为原生 iOS 应用程序中的 Sign in with Apple 提供了开发工具包支持。要在本机 iOS 设备中使用 Sign in with Apple 实施用户身份验证,请按照 Apple 文档中的使用 Sign in with Apple 实施用户身份验证操作。

Amazon Cognito 使用 ID 令牌来对用户进行身份验证、生成唯一标识符,并根据需要授予用户对其他 AWS 资源的访问权限。

(void)finishedWithAuth: (ASAuthorizationAppleIDCredential *)auth error: (NSError *) error { NSString *idToken = [ASAuthorizationAppleIDCredential objectForKey:@"identityToken"]; credentialsProvider.logins = @{ "appleid.apple.com": idToken }; }

所用 Sign in with Apple:iOS - Swift

Apple 为原生 iOS 应用程序中的 Sign in with Apple 提供了开发工具包支持。要在本机 iOS 设备中使用 Sign in with Apple 实施用户身份验证,请按照 Apple 文档中的使用 Sign in with Apple 实施用户身份验证操作。

Amazon Cognito 使用 ID 令牌来对用户进行身份验证、生成唯一标识符,并根据需要授予用户对其他 AWS 资源的访问权限。

有关在 iOS 中设置 Sign in with Apple 的更多信息,请参阅设置 Sign in with Apple

func finishedWithAuth(auth: ASAuthorizationAppleIDCredential!, error: NSError!) { if error != nil { print(error.localizedDescription) } else { let idToken = auth.identityToken, credentialsProvider.logins = ["appleid.apple.com": idToken!] } }

使用 Sign in with Apple:JavaScript

Apple 不提供支持 Sign in with Apple for JavaScript 的开发工具包。您可以改为在 Web 视图中使用 Web 流。

Sign in with Apple 使用会话对象来跟踪其状态。Amazon Cognito 使用来自此会话对象的 ID 令牌来对用户进行身份验证、生成唯一标识符,并根据需要授予用户对其他 AWS 资源的访问权限。

function signinCallback(authResult) { // Add the apple's id token to the Amazon Cognito credentials login map. AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'IDENTITY_POOL_ID', Logins: { 'appleid.apple.com': authResult['id_token'] } }); // Obtain AWS credentials AWS.config.credentials.get(function(){ // Access AWS resources here. }); }

使用 Sign in with Apple:Xamarin

我们没有支持 Sign in with Apple for Xamarin 的开发工具包。您可以改为在 Web 视图中使用 Web 流。

Sign in with Apple 使用会话对象来跟踪其状态。Amazon Cognito 使用来自此会话对象的 ID 令牌来对用户进行身份验证、生成唯一标识符,并根据需要授予用户对其他 AWS 资源的访问权限。

拥有令牌后,您可以在 CognitoAWSCredentials 中对其进行设置:

credentials.AddLogin("appleid.apple.com", token);