将 Google 设置为身份池 IdP - Amazon Cognito

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

将 Google 设置为身份池 IdP

Amazon Cognito 与 Google 集成,以针对移动应用程序用户提供联合身份验证。本部分介绍如何使用 Google 作为 IdP 来注册和设置应用程序。

Android

注意

如果您的应用程序使用 Google 并且可在多个移动平台上使用,则应将 Google 配置为 OpenID Connect 提供商。将所有创建的客户端 ID 添加为附加受众值,以便更好地集成。要了解有关 Google 跨客户端身份模式的更多信息,请参阅跨客户端身份

设置 Google

要激活 Google Sign-in for Android,请为应用程序创建 Google Developers 控制台项目。

  1. 转到 Google Developers 控制台并创建一个新项目。

  2. 选择 APIs & Services(API 和服务),然后选择 OAuth consent screen(OAuth 同意屏幕)。自定义 Google 在征求用户同意以便与您的应用共享个人资料数据时向用户显示的信息。

  3. 选择 Credentials(凭证),然后选择 Create credentials(创建凭证)。选择 OAuth client ID(OAuth 客户端 ID)。选择 Android 作为 Application type(应用程序类型)。为开发应用程序的每个平台创建单独的客户端 ID。

  4. Credentials(凭证)中,选择 Manage service accounts(管理服务账户)。选择 Create service account(创建服务账户)。输入服务账户详细信息,然后选择 Create and continue(创建并继续)。

  5. 授予服务账户对项目的访问权限。根据应用程序的要求授予用户访问服务账户的权限。

  6. 选择您的新服务账户,选择 Keys(密钥)选项卡,然后选择 Add key(添加密钥)。创建并下载新的 JSON 密钥。

有关如何使用 Google Developers 控制台的更多信息,请参阅 Google Cloud 文档中的创建和管理项目

有关将 Google 集成到 Android 应用程序的更多信息,请参阅 Google Identity 文档中的 Google Sign-In for Android

添加 Google 身份提供者(IdP)
  1. Amazon Cognito 控制台中选择身份池。选择身份池。

  2. 选择用户访问选项卡。

  3. 选择添加身份提供者

  4. 选择 Google

  5. 输入您在 Google Cloud Platform 上创建的 OAuth 项目的客户端 ID。有关更多信息,请参阅《Google Cloud Platform 控制台帮助》中的设置 OAuth 2.0

  6. 要设置 Amazon Cognito 在向通过该提供者进行身份验证的用户颁发凭证时请求的角色,请配置角色设置

    1. 您可以为该 IdP 中的用户分配您在配置经过身份验证的角色时设置的原定设置角色,也可以使用规则选择角色

      1. 如果您选择使用规则选择角色,请输入用户身份验证中的来源声明、您要用来比较声明的运算符、导致与该角色选择匹配的,以及当角色分配匹配时要分配的角色。选择添加其他,以根据不同的条件创建其他规则。

      2. 选择角色解析。当用户的声明与您的规则不匹配时,您可以拒绝凭证或为经过身份验证的角色颁发凭证。

  7. 要更改 Amazon Cognito 在向通过该提供者进行身份验证的用户颁发凭证时分配的主体标签,请配置访问控制属性

    1. 如果不应用主体标签,请选择非活动

    2. 要基于 subaud 声明应用主体标签,请选择使用原定设置映射

    3. 要为主体标签创建自己的自定义属性模式,请选择使用自定义映射。然后,对于您要在标签中表示的每个声明,输入要从该声明中获取的标签键

  8. 选择保存更改

使用 Google

要在应用程序中启用 Login with Google,请按照适用于 Android 的 Google 文档中的说明执行操作。当用户登录时,他们向 Google 请求 OpenID Connect 身份验证令牌。然后,Amazon Cognito 将使用该令牌对用户进行身份验证并生成一个唯一标识符。

以下示例代码显示如何从 Google Play 服务检索身份验证令牌:

GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext()); AccountManager am = AccountManager.get(this); Account[] accounts = am.getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE); String token = GoogleAuthUtil.getToken(getApplicationContext(), accounts[0].name, "audience:server:client_id:YOUR_GOOGLE_CLIENT_ID"); Map<String, String> logins = new HashMap<String, String>(); logins.put("accounts.google.com", token); credentialsProvider.setLogins(logins);

iOS - Objective-C

注意

如果您的应用程序使用 Google 并且可在多个移动平台上使用,则应将 Google 配置为 OpenID Connect 提供商。将所有创建的客户端 ID 添加为附加受众值,以便更好地集成。要了解有关 Google 跨客户端身份模式的更多信息,请参阅跨客户端身份

设置 Google

要启用 Google Sign-in for iOS,请为应用程序创建 Google Developers 控制台项目。

  1. 转到 Google Developers 控制台并创建一个新项目。

  2. 选择 APIs & Services(API 和服务),然后选择 OAuth consent screen(OAuth 同意屏幕)。自定义 Google 在征求用户同意以便与您的应用共享个人资料数据时向用户显示的信息。

  3. 选择 Credentials(凭证),然后选择 Create credentials(创建凭证)。选择 OAuth client ID(OAuth 客户端 ID)。选择 iOS 作为 Application type(应用程序类型)。为开发应用程序的每个平台创建单独的客户端 ID。

  4. Credentials(凭证)中,选择 Manage service accounts(管理服务账户)。选择 Create service account(创建服务账户)。输入服务账户详细信息,然后选择 Create and continue(创建并继续)。

  5. 授予服务账户对项目的访问权限。根据应用程序的要求授予用户访问服务账户的权限。

  6. 选择您的新服务账户。选择 Keys(密钥)选项卡,然后选择 Add key(添加密钥)。创建并下载新的 JSON 密钥。

有关如何使用 Google Developers 控制台的更多信息,请参阅 Google Cloud 文档中的创建和管理项目

有关将 Google 集成到 iOS 应用程序的更多信息,请参阅 Google Identity 文档中的 Google Sign-In for iOS

添加 Google 身份提供者(IdP)
  1. Amazon Cognito 控制台中选择身份池。选择身份池。

  2. 选择用户访问选项卡。

  3. 选择添加身份提供者

  4. 选择 Google

  5. 输入您在 Google Cloud Platform 上创建的 OAuth 项目的客户端 ID。有关更多信息,请参阅《Google Cloud Platform 控制台帮助》中的设置 OAuth 2.0

  6. 要设置 Amazon Cognito 在向通过该提供者进行身份验证的用户颁发凭证时请求的角色,请配置角色设置

    1. 您可以为该 IdP 中的用户分配您在配置经过身份验证的角色时设置的原定设置角色,也可以使用规则选择角色

      1. 如果您选择使用规则选择角色,请输入用户身份验证中的来源声明、您要用来比较声明的运算符、导致与该角色选择匹配的,以及当角色分配匹配时要分配的角色。选择添加其他,以根据不同的条件创建其他规则。

      2. 选择角色解析。当用户的声明与您的规则不匹配时,您可以拒绝凭证或为经过身份验证的角色颁发凭证。

  7. 要更改 Amazon Cognito 在向通过该提供者进行身份验证的用户颁发凭证时分配的主体标签,请配置访问控制属性

    1. 如果不应用主体标签,请选择非活动

    2. 要基于 subaud 声明应用主体标签,请选择使用原定设置映射

    3. 要为主体标签创建自己的自定义属性模式,请选择使用自定义映射。然后,对于您要在标签中表示的每个声明,输入要从该声明中获取的标签键

  8. 选择保存更改

使用 Google

要在应用程序中启用“用 Google 登录”,请按照适用于 iOS 的 Google 文档中的说明执行操作。成功通过身份验证后,将生成一个 OpenID Connect 身份验证令牌,供 Amazon Cognito 用于对用户进行身份验证并生成一个唯一标识符。

成功通过身份验证后,将生成一个 GTMOAuth2Authentication 对象,其中包含一个 id_token,供 Amazon Cognito 用于对用户进行身份验证并生成一个唯一标识符:

- (void)finishedWithAuth: (GTMOAuth2Authentication *)auth error: (NSError *) error { NSString *idToken = [auth.parameters objectForKey:@"id_token"]; credentialsProvider.logins = @{ @(AWSCognitoLoginProviderKeyGoogle): idToken }; }

iOS - Swift

注意

如果您的应用程序使用 Google 并且可在多个移动平台上使用,则应将 Google 配置为 OpenID Connect 提供商。将所有创建的客户端 ID 添加为附加受众值,以便更好地集成。要了解有关 Google 跨客户端身份模式的更多信息,请参阅跨客户端身份

设置 Google

要启用 Google Sign-in for iOS,请为应用程序创建 Google Developers 控制台项目。

  1. 转到 Google Developers 控制台并创建一个新项目。

  2. 选择 APIs & Services(API 和服务),然后选择 OAuth consent screen(OAuth 同意屏幕)。自定义 Google 在征求用户同意以便与您的应用共享个人资料数据时向用户显示的信息。

  3. 选择 Credentials(凭证),然后选择 Create credentials(创建凭证)。选择 OAuth client ID(OAuth 客户端 ID)。选择 iOS 作为 Application type(应用程序类型)。为开发应用程序的每个平台创建单独的客户端 ID。

  4. Credentials(凭证)中,选择 Manage service accounts(管理服务账户)。选择 Create service account(创建服务账户)。输入服务账户详细信息,然后选择 Create and continue(创建并继续)。

  5. 授予服务账户对项目的访问权限。根据应用程序的要求授予用户访问服务账户的权限。

  6. 选择您的新服务账户,选择 Keys(密钥)选项卡,然后选择 Add key(添加密钥)。创建并下载新的 JSON 密钥。

有关如何使用 Google Developers 控制台的更多信息,请参阅 Google Cloud 文档中的创建和管理项目

有关将 Google 集成到 iOS 应用程序的更多信息,请参阅 Google Identity 文档中的 Google Sign-In for iOS

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

在 Amazon Cognito 控制台中配置外部提供商
  1. 选择想要在其中启用 Google 作为外部提供商的身份池的名称。此时将显示身份池的 Dashboard(控制面板)页。

  2. 控制面板页面的右上角,选择 Edit identity pool (编辑身份池)。此时将显示“Edit identity pool”(编辑身份池)页。

  3. 向下滚动并选择 Authentication providers(身份验证提供商)以展开这一部分。

  4. 选择 Google 选项卡。

  5. 选择 Unlock(解锁)。

  6. 输入从 Google 获取的 Google 客户端 ID,然后选择 Save Changes(保存更改)。

使用 Google

要在应用程序中启用“用 Google 登录”,请按照适用于 iOS 的 Google 文档中的说明执行操作。成功通过身份验证后,将生成一个 OpenID Connect 身份验证令牌,供 Amazon Cognito 用于对用户进行身份验证并生成一个唯一标识符。

成功的身份验证会生成一个包含 id_tokenGTMOAuth2Authentication 对象。Amazon Cognito 使用此令牌对用户进行身份验证并生成一个唯一标识符:

func finishedWithAuth(auth: GTMOAuth2Authentication!, error: NSError!) { if error != nil { print(error.localizedDescription) } else { let idToken = auth.parameters.objectForKey("id_token") credentialsProvider.logins = [AWSCognitoLoginProviderKey.Google.rawValue: idToken!] } }

JavaScript

注意

如果您的应用程序使用 Google 并且可在多个移动平台上使用,则应将 Google 配置为 OpenID Connect 提供商。将所有创建的客户端 ID 添加为附加受众值,以便更好地集成。要了解有关 Google 跨客户端身份模式的更多信息,请参阅跨客户端身份

设置 Google

要为 JavaScript 网络应用程序启用 Google 登录,请为您的应用程序创建 Google 开发者控制台项目。

  1. 转到 Google Developers 控制台并创建一个新项目。

  2. 选择 APIs & Services(API 和服务),然后选择 OAuth consent screen(OAuth 同意屏幕)。自定义 Google 在征求用户同意以便与您的应用共享个人资料数据时向用户显示的信息。

  3. 选择 Credentials(凭证),然后选择 Create credentials(创建凭证)。选择 OAuth client ID(OAuth 客户端 ID)。选择 Web application(Web 应用程序)作为 Application type(应用程序类型)。为开发应用程序的每个平台创建单独的客户端 ID。

  4. Credentials(凭证)中,选择 Manage service accounts(管理服务账户)。选择 Create service account(创建服务账户)。输入服务账户详细信息,然后选择 Create and continue(创建并继续)。

  5. 授予服务账户对项目的访问权限。根据应用程序的要求授予用户访问服务账户的权限。

  6. 选择您的新服务账户,选择 Keys(密钥)选项卡,然后选择 Add key(添加密钥)。创建并下载新的 JSON 密钥。

有关如何使用 Google Developers 控制台的更多信息,请参阅 Google Cloud 文档中的创建和管理项目

有关如何将 Google 集成到 Web 应用程序的更多信息,请参阅 Google Identity 文档中的使用 Google 登录

在 Amazon Cognito 控制台中配置外部提供商

添加 Google 身份提供者(IdP)
  1. Amazon Cognito 控制台中选择身份池。选择身份池。

  2. 选择用户访问选项卡。

  3. 选择添加身份提供者

  4. 选择 Google

  5. 输入您在 Google Cloud Platform 上创建的 OAuth 项目的客户端 ID。有关更多信息,请参阅《Google Cloud Platform 控制台帮助》中的设置 OAuth 2.0

  6. 要设置 Amazon Cognito 在向通过该提供者进行身份验证的用户颁发凭证时请求的角色,请配置角色设置

    1. 您可以为该 IdP 中的用户分配您在配置经过身份验证的角色时设置的原定设置角色,也可以使用规则选择角色

      1. 如果您选择使用规则选择角色,请输入用户身份验证中的来源声明、您要用来比较声明的运算符、导致与该角色选择匹配的,以及当角色分配匹配时要分配的角色。选择添加其他,以根据不同的条件创建其他规则。

      2. 选择角色解析。当用户的声明与您的规则不匹配时,您可以拒绝凭证或为经过身份验证的角色颁发凭证。

  7. 要更改 Amazon Cognito 在向通过该提供者进行身份验证的用户颁发凭证时分配的主体标签,请配置访问控制属性

    1. 如果不应用主体标签,请选择非活动

    2. 要基于 subaud 声明应用主体标签,请选择使用原定设置映射

    3. 要为主体标签创建自己的自定义属性模式,请选择使用自定义映射。然后,对于您要在标签中表示的每个声明,输入要从该声明中获取的标签键

  8. 选择保存更改

使用 Google

要在应用程序中启用“用 Google 登录”,请按照适用于 Web 的 Google 文档中的说明执行操作。

成功通过身份验证后,将生成一个响应对象,其中包含一个 id_token,供 Amazon Cognito 用于对用户进行身份验证并生成一个唯一标识符:

function signinCallback(authResult) { if (authResult['status']['signed_in']) { // Add the Google access token to the Amazon Cognito credentials login map. AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'IDENTITY_POOL_ID', Logins: { 'accounts.google.com': authResult['id_token'] } }); // Obtain AWS credentials AWS.config.credentials.get(function(){ // Access AWS resources here. }); } }

Unity

设置 Google

要对 Unity 应用程序启用 Google Sign-in,请为应用程序创建 Google Developers 控制台项目。

  1. 转到 Google Developers 控制台并创建一个新项目。

  2. 选择 APIs & Services(API 和服务),然后选择 OAuth consent screen(OAuth 同意屏幕)。自定义 Google 在征求用户同意以便与您的应用共享个人资料数据时向用户显示的信息。

  3. 选择 Credentials(凭证),然后选择 Create credentials(创建凭证)。选择 OAuth client ID(OAuth 客户端 ID)。选择 Web application(Web 应用程序)作为 Application type(应用程序类型)。为开发应用程序的每个平台创建单独的客户端 ID。

  4. 对于 Unity,为 Android 另外创建一个 OAuth client ID(OAuth 客户端 ID),为 iOS 再创建一个。

  5. Credentials(凭证)中,选择 Manage service accounts(管理服务账户)。选择 Create service account(创建服务账户)。输入服务账户详细信息,然后选择 Create and continue(创建并继续)。

  6. 授予服务账户对项目的访问权限。根据应用程序的要求授予用户访问服务账户的权限。

  7. 选择您的新服务账户,选择 Keys(密钥)选项卡,然后选择 Add key(添加密钥)。创建并下载新的 JSON 密钥。

有关如何使用 Google Developers 控制台的更多信息,请参阅 Google Cloud 文档中的创建和管理项目

在 IAM 控制台中创建 OpenID 提供商

  1. 在 IAM 控制台中创建 OpenID 提供商。有关如何设置 OpenID 提供商的信息,请参阅使用 OpenID Connect 身份提供商

  2. 当系统提示您输入提供商 URL 时,请输入 "https://accounts.google.com"

  3. 当系统提示您在 Audience(受众)字段中输入一个值时,请输入您在之前步骤中创建的三个客户端 ID 中的任意一个。

  4. 选择提供商名称并使用另外两个客户端 ID 添加另外两个受众。

在 Amazon Cognito 控制台中配置外部提供商

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

添加 Google 身份提供者(IdP)
  1. Amazon Cognito 控制台中选择身份池。选择身份池。

  2. 选择用户访问选项卡。

  3. 选择添加身份提供者

  4. 选择 Google

  5. 输入您在 Google Cloud Platform 上创建的 OAuth 项目的客户端 ID。有关更多信息,请参阅《Google Cloud Platform 控制台帮助》中的设置 OAuth 2.0

  6. 要设置 Amazon Cognito 在向通过该提供者进行身份验证的用户颁发凭证时请求的角色,请配置角色设置

    1. 您可以为该 IdP 中的用户分配您在配置经过身份验证的角色时设置的原定设置角色,也可以使用规则选择角色

      1. 如果您选择使用规则选择角色,请输入用户身份验证中的来源声明、您要用来比较声明的运算符、导致与该角色选择匹配的,以及当角色分配匹配时要分配的角色。选择添加其他,以根据不同的条件创建其他规则。

      2. 选择角色解析。当用户的声明与您的规则不匹配时,您可以拒绝凭证或为经过身份验证的角色颁发凭证。

  7. 要更改 Amazon Cognito 在向通过该提供者进行身份验证的用户颁发凭证时分配的主体标签,请配置访问控制属性

    1. 如果不应用主体标签,请选择非活动

    2. 要基于 subaud 声明应用主体标签,请选择使用原定设置映射

    3. 要为主体标签创建自己的自定义属性模式,请选择使用自定义映射。然后,对于您要在标签中表示的每个声明,输入要从该声明中获取的标签键

  8. 选择保存更改

安装 Unity Google 插件

  1. 适用于 Unity 的 Google Play Games 插件添加到 Unity 项目。

  2. 在 Unity 中,从 Windows 菜单,使用适用于 Android 和 iOS 平台的三个 ID 配置插件。

使用 Google

以下示例代码显示如何从 Google Play 服务检索身份验证令牌:

void Start() { PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder().Build(); PlayGamesPlatform.InitializeInstance(config); PlayGamesPlatform.DebugLogEnabled = true; PlayGamesPlatform.Activate(); Social.localUser.Authenticate(GoogleLoginCallback); } void GoogleLoginCallback(bool success) { if (success) { string token = PlayGamesPlatform.Instance.GetIdToken(); credentials.AddLogin("accounts.google.com", token); } else { Debug.LogError("Google login failed. If you are not running in an actual Android/iOS device, this is expected."); } }

Xamarin

注意

Amazon Cognito 本身并不支持 Xamarin 平台上的 Google。目前,进行集成需要使用 Web 视图来完成浏览器登录流程。要了解 Google 集成如何与其他开发工具包配合使用,请选择另一个平台。

要在应用程序中启用 Login with Google,请对用户进行身份验证并从其获取 OpenID Connect 令牌。Amazon Cognito 使用此令牌生成与 Amazon Cognito 身份关联的唯一用户标识符。遗憾的是,适用于 Xamarin 的 Google SDK 包不允许您检索 OpenID Connect 令牌,因此,请使用替代客户端或 Web 视图中的 Web 流程。

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

credentials.AddLogin("accounts.google.com", token);
注意

如果您的应用程序使用 Google 并且可在多个移动平台上使用,则应将 Google 配置为 OpenID Connect 提供商。将所有创建的客户端 ID 添加为附加受众值,以便更好地集成。要了解有关 Google 跨客户端身份模式的更多信息,请参阅跨客户端身份