

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

# 在使用者集區中新增和管理 SAML 身分提供者
<a name="cognito-user-pools-managing-saml-idp"></a>

將身分提供者設定為使用 Amazon Cognito 之後，您可以將其新增至使用者集區和應用程式用戶端。下列程序示範如何在 Amazon Cognito 使用者集區中建立、修改和刪除 SAML 供應商。

------
#### [ AWS 管理主控台 ]

您可以使用 AWS 管理主控台 來建立和刪除 SAML 身分提供者 IdPs)。

建立 SAML IdP 之前，您必須擁有從第三方 IdP 取得的 SAML 中繼資料文件。如需有關如何取得或產生所需之 SAML 中繼資料文件的詳細資訊，請參閱 [設定您的第三方 SAML 身分提供者](cognito-user-pools-integrating-3rd-party-saml-providers.md)。

**在您的使用者集區中設定 SAML 2.0 IdP**

1. 前往 [Amazon Cognito 主控台](https://console.aws.amazon.com/cognito/home)。若出現提示，請輸入 AWS 憑證。

1. 選擇 **User Pools** (使用者集區)。

1. 從清單中選擇現有的使用者集區，或[建立使用者集區](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)。

1. 選擇**社交和外部提供者**選單，然後選取**新增身分提供者**。

1. 選擇 **SAML** IdP。

1. 輸入**供應商名稱**。您可以在 `identity_provider` 請求參數中將此易記的名稱傳遞給 [授權端點](authorization-endpoint.md)。

1. 輸入以逗號分隔的 **Identifiers** (識別符)。識別符通知 Amazon Cognito，應該檢查使用者在登入時輸入的電子郵件地址，然後將其導向至與其網域對應的供應商。

1. 如果您希望 Amazon Cognito 在使用者登出時傳送已簽署的登出請求給您的供應商，則請選擇 **Add sign-out flow** (新增登出流程)。您必須設定 SAML 2.0 IdP，將登出回應傳送至設定受管登入時建立的`https://mydomain.auth.us-east-1.amazoncognito.com/saml2/logout`端點。`saml2/logout` 端點會使用 POST 繫結。
**注意**  
如果選取此選項，且您的 SAML IdP 預期有簽署的登出請求，您還必須將使用者集區的簽署憑證提供給 SAML IdP。  
SAML IdP 將處理簽署登出請求，以及將您的使用者從 Amazon Cognito 工作階段登出。

1. 選擇您的 **IdP 起始 SAML 登入**組態。作為安全最佳實務，請選擇**僅接受 SP 起始的 SAML 聲明**。如果您已準備好讓環境安全地接受未經請求的 SAML 登入工作階段，請選擇**接受 SP 起始和 IdP 起始的 SAML 聲明**。如需詳細資訊，請參閱[Amazon Cognito 使用者集區中的 SAML 工作階段啟動](cognito-user-pools-SAML-session-initiation.md)。

1. 選擇 **Metadata document source** (中繼資料文件來源)。如果您的 IdP 以公有 URL 提供 SAML 中繼資料，則可以選擇 **Metadata document URL** (中繼資料文件 URL)，然後輸入該公有 URL。否則，請選擇 **Upload metadata document** (上傳中繼資料文件)，然後選取您先前從供應商處下載的中繼資料檔案。
**注意**  
如果您的提供者有公有端點，而不是上傳檔案，我們建議您輸入中繼資料文件 URL。Amazon Cognito 會自動從中繼資料 URL 重新整理中繼資料。通常每 6 小時或是在中繼資料過期之前 (取較早的時間) 重新整理中繼資料。

1. **在 SAML 提供者和使用者集區之間映射屬性**，將 SAML 提供者屬性映射至使用者集區中的使用者設定檔。在屬性對應中包含您的使用者集區必要屬性。

   例如，當您選擇 **User pool attribute** (使用者集區屬性) `email` 時，隨著 IdP SAML 聲明中顯示的 SAML 屬性名稱輸入 SAML 屬性名稱。如果 IdP 提供 SAML 聲明範例，則您可以使用這些聲明範例協助您找到名稱。有些 IdPs 使用簡單的名稱，例如 `email`，有些則使用如下的名稱。

   ```
   http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
   ```

1. 選擇**建立**。

------
#### [ API/CLI ]

您可以使用下列命令來建立及管理 SAML 身分提供者 (IdP)。

**建立 IdP 並上傳中繼資料文件**
+ AWS CLI: `aws cognito-idp create-identity-provider`

  使用中繼資料檔案的範例：`aws cognito-idp create-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1 --provider-type SAML --provider-details file:///details.json --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress`

  其中 `details.json` 包含：

  ```
  "ProviderDetails": { 
        "MetadataFile": "<SAML metadata XML>",
        "IDPSignout" : "true",
        "RequestSigningAlgorithm" : "rsa-sha256",
        "EncryptedResponses" : "true",
        "IDPInit" : "true"
  }
  ```
**注意**  
如果 *<SAML 中繼資料 XML>* 包含字元 的任何執行個體`"`，您必須新增 `\`做為逸出字元：`\"`。

  使用中繼資料 URL 的範例：`aws cognito-idp create-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1 --provider-type SAML --provider-details MetadataURL=https://myidp.example.com/sso/saml/metadata --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress`
+ AWS API：[CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html)

**為 IdP 上傳新的中繼資料文件**
+ AWS CLI: `aws cognito-idp update-identity-provider`

  使用中繼資料檔案的範例：`aws cognito-idp update-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1 --provider-details file:///details.json --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress`

  其中 `details.json` 包含：

  ```
  "ProviderDetails": { 
        "MetadataFile": "<SAML metadata XML>",
        "IDPSignout" : "true",
        "RequestSigningAlgorithm" : "rsa-sha256",
        "EncryptedResponses" : "true",
        "IDPInit" : "true"
  }
  ```
**注意**  
如果 *<SAML 中繼資料 XML>* 包含字元 的任何執行個體`"`，您必須新增 `\`做為逸出字元：`\"`。

  使用中繼資料 URL 的範例：`aws cognito-idp update-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1 --provider-details MetadataURL=https://myidp.example.com/sso/saml/metadata --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress`
+ AWS API：[UpdateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html)

**取得特定 IdP 的相關資訊**
+ AWS CLI: `aws cognito-idp describe-identity-provider`

  `aws cognito-idp describe-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1`
+ AWS API：[DescribeIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeIdentityProvider.html)

**列出所有 IdP 的相關資訊**
+ AWS CLI: `aws cognito-idp list-identity-providers`

  範例：`aws cognito-idp list-identity-providers --user-pool-id us-east-1_EXAMPLE --max-results 3`
+ AWS API：[ListIdentityProviders](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListIdentityProviders.html)

**刪除 IdP**
+ AWS CLI: `aws cognito-idp delete-identity-provider`

  `aws cognito-idp delete-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1`
+ AWS API：[DeleteIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteIdentityProvider.html)

------

**設定 SAML IdP 以新增使用者集區做為依賴方**
+ 使用者集區服務供應商 URN 為：`urn:amazon:cognito:sp:us-east-1_EXAMPLE`。Amazon Cognito 需要符合 SAML 回應中此 URN 的對象限制值。將 IdP 設定為針對 IdP-to-SP 回應訊息使用下列 POST 繫結端點。

  ```
  https://mydomain.auth.us-east-1.amazoncognito.com/saml2/idpresponse
  ```
+ 您的 SAML IdP 必須在 SAML 聲明中填入 `NameID`和使用者集區的任何必要屬性。 `NameID` 用於唯一識別使用者集區中的 SAML 聯合身分使用者。您的 IdP 必須以一致且區分大小寫的格式傳遞每個使用者的 SAML 名稱 ID。使用者名稱 ID 值的任何變化都會建立新的使用者設定檔。

**如要對您的 SAML 2.0 IDP 提供簽署憑證**
+ 若要從 Amazon Cognito 下載公有金鑰的副本，您的 IdP 可用來驗證 SAML 登出請求，請選擇使用者集區的**社交和外部供應商**選單，選取您的 IdP，然後在**檢視簽署憑證**下，選取**下載為 .crt**。

您可以使用 Amazon Cognito 主控台刪除在使用者集區中設定的任何 SAML 供應商。

**刪除 SAML 供應商**

1. 登入 [Amazon Cognito 主控台](https://console.aws.amazon.com/cognito/home)。

1. 在導覽窗格中，選擇 **User Pools** (使用者集區)，然後選擇您要編輯的使用者集區。

1. 選擇**社交和外部供應商**選單。

1. 在您要刪除的 SAML IdP 旁邊，選取選項按鈕。

1. 出現 **Delete identity provider** (刪除身分提供者) 的提示時，請輸入 SAML 供應商的名稱以確認刪除，然後選擇 **Delete** (刪除)。