

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將 Google 設定為身分集區 IdP
<a name="google"></a>

Amazon Cognito 身分集區與 Google 搭配使用，為您的行動應用程式使用者提供聯合身分驗證。本節說明如何使用 Google 做為 IdP 來註冊及設定您的應用程式。

## Android
<a name="set-up-google-1.android"></a>

**注意**  
如果您的應用程式使用 Google 並且將可在多個行動平台上使用，則應將其設定為 [OpenID Connect 供應商](open-id.md)。將所有建立的用戶端 ID 新增為其他對象值，以便達到更佳的整合。若要進一步了解 Google 的跨用戶端身分模型，請參閱[跨用戶端身分](https://developers.google.com/accounts/docs/CrossClientAuth)。

**設定 Google**

若要啟用適用於 Android 的 Google 登入，請為應用程式建立 Google 開發人員主控台專案。

1. 前往 [Google 開發人員主控台](https://console.developers.google.com/)，並建立新的專案。

1. 選擇 **APIs & Services** (API 與服務)，然後選擇 **OAuth consent screen** (OAuth 同意畫面)。自訂當 Google 要求使用者同意將其設定檔資料與您的應用程式共享時，Google 要向使用者顯示的資訊。

1. 選擇 **Credentials** (憑證)，然後選擇 **Create credentials** (建立憑證)。選擇 **OAuth client ID** (OAuth 用戶端 ID)。選取 **Android** 做為 **Application type** (應用程式類型)。為開發應用程式所在的每個平台建立單獨的用戶端 ID。

1. 從 **Credentials** (憑證)，選擇 **Manage service accounts** (管理服務帳戶)。選擇 **Create service account** (建立服務帳戶)。輸入您的服務帳戶詳細資訊，然後選擇 **Create and continue** (建立並繼續)。

1. 將服務帳戶存取權授與您的專案。根據您應用程式的需求將服務帳戶的存取權授與使用者。

1. 選擇您的新服務帳戶，選擇 **Keys** (金鑰) 索引標籤，然後選擇 **Add key** (新增金鑰)。建立並下載新的 JSON 金鑰。

如需使用 Google 開發人員主控台的詳細資訊，請參閱 Google Cloud 文件中的[建立與管理專案](https://cloud.google.com/resource-manager/docs/creating-managing-projects)。

如需如何將 Google 整合到您的 Android 應用程式的詳細資訊，請參閱 Google Identity 文件中的[使用 Sign in with Google 驗證使用者](https://developer.android.com/identity/sign-in/credential-manager-siwg)。

**若要新增 Google 身分提供者 (IdP)**

1. 從 [Amazon Cognito 主控台](https://console.aws.amazon.com/cognito/home)選擇 **身分池**。選取身分池。

1. 選擇 **使用者存取權** 索引標籤。

1. 選取 **新增身分供應商**。

1. 選擇 **Google**。

1. 輸入您在 [Google Cloud Platform](https://console.cloud.google.com/) 建立的 OAuth 專案 **用戶端 ID**。如需詳細資訊，請參閱《Google Cloud Platform 主控台幫助》中的[設定 OAuth 2.0](https://support.google.com/cloud/answer/6158849)。

1. 若要設定 Amazon Cognito 向已通過此提供者進行身分驗證的使用者發布憑證時的角色，請設定 **角色設定**。

   1. 您可以為該 IdP 使用者指派設定 **已驗證角色** 時的 **預設角色**，或您可以 **選擇具有規則的角色**。

     1. 如果您選擇 **使用規則選擇角色**，請輸入使用者身分驗證的 **宣告** 來源、比較宣告的 **操作員**、導致符合角色選擇的 **值**，以及當符合 **角色指派** 時您要指派的 **角色**。選取 **新增另一項** 以根據不同的條件建立其他規則。

     1. 選擇 **角色解析**。當您的使用者宣告與您的規則不符時，您可以拒絕憑證或向 **已驗證角色** 發出憑證。

1. 若要變更透過此提供者驗證使用者，Amazon Cognito 發布憑證時指派的主要索引標籤，請設定 **存取控制的屬性**。

   1. 若不套用主要索引標籤，請選擇 **非作用中**。

   1. 若要根據 `sub` 和 `aud` 宣告套用主要索引標籤，請選擇 **使用預設對應**。

   1. 若要建立您自己的自訂屬性結構描述至主要索引標籤，請選擇 **使用自訂對應**。然後，輸入您要從每個 **宣告** 中獲取的 **標籤金鑰**，顯示於索引標籤當中。

1. 選取**儲存變更**。

**使用 Google**

若要在您的應用程式中啟用以 Google 登入，請遵循[適用於 Android 的 Google 說明文件](https://developers.google.com/identity/sign-in/android/start)中的指示。當使用者登入時，他們會向 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
<a name="set-up-google-1.ios-objc"></a>

**注意**  
如果您的應用程式使用 Google 並且可在多個行動平台上使用，則應將 Google 設定為 [OpenID Connect 供應商](open-id.md)。將所有建立的用戶端 ID 新增為其他對象值，以便達到更佳的整合。若要進一步了解 Google 的跨用戶端身分模型，請參閱[跨用戶端身分](https://developers.google.com/accounts/docs/CrossClientAuth)。

**設定 Google**

若要啟用適用於 iOS 的 Google 登入，請為應用程式建立 Google 開發人員主控台專案。

1. 前往 [Google 開發人員主控台](https://console.developers.google.com/)，並建立新的專案。

1. 選擇 **APIs & Services** (API 與服務)，然後選擇 **OAuth consent screen** (OAuth 同意畫面)。自訂當 Google 要求使用者同意將其設定檔資料與您的應用程式共享時，Google 要向使用者顯示的資訊。

1. 選擇 **Credentials** (憑證)，然後選擇 **Create credentials** (建立憑證)。選擇 **OAuth client ID** (OAuth 用戶端 ID)。選取 **iOS** 做為 **Application type** (應用程式類型)。為開發應用程式所在的每個平台建立單獨的用戶端 ID。

1. 從 **Credentials** (憑證)，選擇 **Manage service accounts** (管理服務帳戶)。選擇 **Create service account** (建立服務帳戶)。輸入您的服務帳戶詳細資訊，然後選擇 **Create and continue** (建立並繼續)。

1. 將您專案的存取權授與服務帳戶。根據您應用程式的需求將服務帳戶的存取權授與使用者。

1. 選擇您的新服務帳戶。選擇 **Keys** (金鑰) 索引標籤，然後選擇 **Add key** (新增金鑰)。建立並下載新的 JSON 金鑰。

如需使用 Google 開發人員主控台的詳細資訊，請參閱 Google Cloud 文件中的[建立與管理專案](https://cloud.google.com/resource-manager/docs/creating-managing-projects)。

如需如何將 Google 整合到您 iOS 應用程式的詳細資訊，請參閱 Google Identity 文件中的[適用於 iOS 的 Google 登入](https://developers.google.com/identity/sign-in/ios/start-integrating)。

**若要新增 Google 身分提供者 (IdP)**

1. 從 [Amazon Cognito 主控台](https://console.aws.amazon.com/cognito/home)選擇 **身分池**。選取身分池。

1. 選擇 **使用者存取權** 索引標籤。

1. 選取 **新增身分供應商**。

1. 選擇 **Google**。

1. 輸入您在 [Google Cloud Platform](https://console.cloud.google.com/) 建立的 OAuth 專案 **用戶端 ID**。如需詳細資訊，請參閱《Google Cloud Platform 主控台幫助》中的[設定 OAuth 2.0](https://support.google.com/cloud/answer/6158849)。

1. 若要設定 Amazon Cognito 向已通過此提供者進行身分驗證的使用者發布憑證時的角色，請設定 **角色設定**。

   1. 您可以為該 IdP 使用者指派設定 **已驗證角色** 時的 **預設角色**，或您可以 **選擇具有規則的角色**。

     1. 如果您選擇 **使用規則選擇角色**，請輸入使用者身分驗證的 **宣告** 來源、比較宣告的 **操作員**、導致符合角色選擇的 **值**，以及當符合 **角色指派** 時您要指派的 **角色**。選取 **新增另一項** 以根據不同的條件建立其他規則。

     1. 選擇 **角色解析**。當您的使用者宣告與您的規則不符時，您可以拒絕憑證或向 **已驗證角色** 發出憑證。

1. 若要變更透過此提供者驗證使用者，Amazon Cognito 發布憑證時指派的主要索引標籤，請設定 **存取控制的屬性**。

   1. 若不套用主要索引標籤，請選擇 **非作用中**。

   1. 若要根據 `sub` 和 `aud` 宣告套用主要索引標籤，請選擇 **使用預設對應**。

   1. 若要建立您自己的自訂屬性結構描述至主要索引標籤，請選擇 **使用自訂對應**。然後，輸入您要從每個 **宣告** 中獲取的 **標籤金鑰**，顯示於索引標籤當中。

1. 選取**儲存變更**。

**使用 Google**

若要在您的應用程式中啟用以 Google 登入，請遵循[適用於 iOS 的 Google 說明文件](https://developers.google.com/identity/sign-in/ios/start/)。身分驗證成功會產生 OpenID Connect 身分驗證權杖，Amazon Cognito 會用它來驗證使用者，並產生唯一識別符。

身分驗證成功會產生包含 `id_token` 的 `GTMOAuth2Authentication` 物件，Amazon Cognito 會用其來驗證使用者，並產生唯一識別符：

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

## iOS - Swift
<a name="set-up-google-1.ios-swift"></a>

**注意**  
如果您的應用程式使用 Google 並且可在多個行動平台上使用，則應將 Google 設定為 [OpenID Connect 供應商](open-id.md)。將所有建立的用戶端 ID 新增為其他對象值，以便達到更佳的整合。若要進一步了解 Google 的跨用戶端身分模型，請參閱[跨用戶端身分](https://developers.google.com/accounts/docs/CrossClientAuth)。

**設定 Google**

若要啟用適用於 iOS 的 Google 登入，請為應用程式建立 Google 開發人員主控台專案。

1. 前往 [Google 開發人員主控台](https://console.developers.google.com/)，並建立新的專案。

1. 選擇 **APIs & Services** (API 與服務)，然後選擇 **OAuth consent screen** (OAuth 同意畫面)。自訂當 Google 要求使用者同意將其設定檔資料與您的應用程式共享時，Google 要向使用者顯示的資訊。

1. 選擇 **Credentials** (憑證)，然後選擇 **Create credentials** (建立憑證)。選擇 **OAuth client ID** (OAuth 用戶端 ID)。選取 **iOS** 做為 **Application type** (應用程式類型)。為開發應用程式所在的每個平台建立單獨的用戶端 ID。

1. 從 **Credentials** (憑證)，選擇 **Manage service accounts** (管理服務帳戶)。選擇 **Create service account** (建立服務帳戶)。輸入您的服務帳戶詳細資訊，然後選擇 **Create and continue** (建立並繼續)。

1. 將您專案的存取權授與服務帳戶。根據您應用程式的需求將服務帳戶的存取權授與使用者。

1. 選擇您的新服務帳戶，選擇 **Keys** (金鑰) 索引標籤，然後選擇 **Add key** (新增金鑰)。建立並下載新的 JSON 金鑰。

如需使用 Google 開發人員主控台的詳細資訊，請參閱 Google Cloud 文件中的[建立與管理專案](https://cloud.google.com/resource-manager/docs/creating-managing-projects)。

如需如何將 Google 整合到您 iOS 應用程式的詳細資訊，請參閱 Google Identity 文件中的[適用於 iOS 的 Google 登入](https://developers.google.com/identity/sign-in/ios/start-integrating)。

從 [Amazon Cognito 主控台首頁](https://console.aws.amazon.com/cognito/home)選擇 **Manage Identity Pools (管理身分集區)**：

**在 Amazon Cognito 主控台中設定外部供應商**

1. 針對要啟用 Google 做為外部供應商的身分集區，選擇其名稱。該身分集區的 **Dashboard** (儀表板) 頁面隨即出現。

1. 在 **Dashboard (儀表板)** 頁面右上角，選擇 **Edit identity pool (編輯身分集區)**。Edit identity pool (編輯身分集區) 頁面隨即出現。

1. 向下捲動，然後選擇 **Authentication providers** (身分驗證供應商) 以展開該區段。

1. 選擇 **Google** 索引標籤。

1. 選擇 **Unlock (解除鎖定)**。

1. 輸入您從 Google 取得的 Google 用戶端 ID，然後選擇 **Save Changes** (儲存變更)。

**使用 Google**

若要在您的應用程式中啟用以 Google 登入，請遵循[適用於 iOS 的 Google 說明文件](https://developers.google.com/identity/sign-in/ios/start/)。身分驗證成功會產生 OpenID Connect 身分驗證權杖，Amazon Cognito 會用它來驗證使用者，並產生唯一識別符。

成功的身分驗證會產生 `GTMOAuth2Authentication` 物件，該物件包含 `id_token`。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
<a name="set-up-google-1.javascript"></a>

**注意**  
如果您的應用程式使用 Google 並可在多個行動平台上使用，則應將 Google 設定為 [OpenID Connect 供應商](open-id.md)。將所有建立的用戶端 ID 新增為其他對象值，以便達到更佳的整合。若要進一步了解 Google 的跨用戶端身分模型，請參閱[跨用戶端身分](https://developers.google.com/accounts/docs/CrossClientAuth)。

**設定 Google**

若要啟用適用於 JavaScript Web 應用程式的 Google 登入，您必須為應用程式建立 Google 開發人員主控台專案。

1. 前往 [Google 開發人員主控台](https://console.developers.google.com/)，並建立新的專案。

1. 選擇 **APIs & Services** (API 與服務)，然後選擇 **OAuth consent screen** (OAuth 同意畫面)。自訂當 Google 要求使用者同意將其設定檔資料與您的應用程式共享時，Google 要向使用者顯示的資訊。

1. 選擇 **Credentials** (憑證)，然後選擇 **Create credentials** (建立憑證)。選擇 **OAuth client ID** (OAuth 用戶端 ID)。選取 **Web application** (Web 應用程式) 做為 **Application type** (應用程式類型)。為開發應用程式所在的每個平台建立單獨的用戶端 ID。

1. 從 **Credentials** (憑證)，選擇 **Manage service accounts** (管理服務帳戶)。選擇 **Create service account** (建立服務帳戶)。輸入您的服務帳戶詳細資訊，然後選擇 **Create and continue** (建立並繼續)。

1. 將您專案的存取權授與服務帳戶。根據您應用程式的需求將服務帳戶的存取權授與使用者。

1. 選擇您的新服務帳戶，選擇 **Keys** (金鑰) 索引標籤，然後選擇 **Add key** (新增金鑰)。建立並下載新的 JSON 金鑰。

如需使用 Google 開發人員主控台的詳細資訊，請參閱 Google Cloud 文件中的[建立與管理專案](https://cloud.google.com/resource-manager/docs/creating-managing-projects)。

如需如何將 Google 整合到您 Web 應用程式的詳細資訊，請參閱 Google Identity 文件中的[使用 Google 登入](https://developers.google.com/identity/gsi/web/guides/overview)。

**在 Amazon Cognito 主控台中設定外部供應商**

**若要新增 Google 身分提供者 (IdP)**

1. 從 [Amazon Cognito 主控台](https://console.aws.amazon.com/cognito/home)選擇 **身分池**。選取身分池。

1. 選擇 **使用者存取權** 索引標籤。

1. 選取 **新增身分供應商**。

1. 選擇 **Google**。

1. 輸入您在 [Google Cloud Platform](https://console.cloud.google.com/) 建立的 OAuth 專案 **用戶端 ID**。如需詳細資訊，請參閱《Google Cloud Platform 主控台幫助》中的[設定 OAuth 2.0](https://support.google.com/cloud/answer/6158849)。

1. 若要設定 Amazon Cognito 向已通過此提供者進行身分驗證的使用者發布憑證時的角色，請設定 **角色設定**。

   1. 您可以為該 IdP 使用者指派設定 **已驗證角色** 時的 **預設角色**，或您可以 **選擇具有規則的角色**。

     1. 如果您選擇 **使用規則選擇角色**，請輸入使用者身分驗證的 **宣告** 來源、比較宣告的 **操作員**、導致符合角色選擇的 **值**，以及當符合 **角色指派** 時您要指派的 **角色**。選取 **新增另一項** 以根據不同的條件建立其他規則。

     1. 選擇 **角色解析**。當您的使用者宣告與您的規則不符時，您可以拒絕憑證或向 **已驗證角色** 發出憑證。

1. 若要變更透過此提供者驗證使用者，Amazon Cognito 發布憑證時指派的主要索引標籤，請設定 **存取控制的屬性**。

   1. 若不套用主要索引標籤，請選擇 **非作用中**。

   1. 若要根據 `sub` 和 `aud` 宣告套用主要索引標籤，請選擇 **使用預設對應**。

   1. 若要建立您自己的自訂屬性結構描述至主要索引標籤，請選擇 **使用自訂對應**。然後，輸入您要從每個 **宣告** 中獲取的 **標籤金鑰**，顯示於索引標籤當中。

1. 選取**儲存變更**。

**使用 Google**

若要在您的應用程式中啟用以 Google 登入，請遵循[適用於 Web 的 Google 說明文件](https://developers.google.com/identity/gsi/web/guides/overview)。

身分驗證成功會產生包含 `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.
     });
  }
}
```