將 SAML 提供者設定為身分識別集區 IdP - Amazon Cognito

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

將 SAML 提供者設定為身分識別集區 IdP

Amazon Cognito 透過安全聲明標記語言 2.0 (SAML 2.0IdPs) 支援身分提供者進行身分驗證 ()。您可以將支援 SAML 的 IdP 用於 Amazon Cognito,以為您的使用者提供簡單的登入流程。支援 SAML 的 IdP 會指定您的使用者可擔任的 IAM 角色。如此一來,不同的用戶可以收到不同的許可集。

為 SAML IdP 設定您的身分集區

下列步驟說明如何設定您的身分集區來使用 SAML IdP。

注意

在設定身分集區來支援 SAML 供應商之前,您必須先在 IAM 主控台中設定 SAML IdP。如需詳細資訊,請參閱《IAM 使用者指南》中的將第三方 SAML 解決方案供應商與 AWS整合

若要新增 SAML 身分提供者 (IdP)
  1. Amazon Cognito 主控台選擇 身分池。選取身分池。

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

  3. 選取 新增身分供應商

  4. 選擇 SAML

  5. 從您 AWS 帳戶的. IdPs 中的 IAM 選擇 SAML 身分識別提供者。如果要新增新的 SAML 提供者,請選擇 建立新的提供者 以前往 IAM 主控台。

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

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

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

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

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

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

    2. 若要根據 subaud 宣告套用主要索引標籤,請選擇 使用預設對應

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

  8. 選取儲存變更

設定 SAML IdP

建立 SAML 供應商之後,請設定您的 SAML IdP,以在您的 IdP 與 AWS之間新增依賴方信任。對於許多 IdPs,您可以指定 IdP 可用來從 XML 文件讀取信賴憑證者資訊和憑證的 URL。對於 AWS,您可以使用 https://signin.aws.amazon.com/static/saml-metadata.xml。下一個步驟是設定來自 IdP 的 SAML 宣告回應,以填入需要的宣告。 AWS 如需宣告組態的詳細資訊,請參閱設定身分驗證回應的 SAML 聲明

當您的 SAML IdP 在 SAML 中繼資料中包含多個簽署憑證時,登入時,如果 SAML 宣告與 SAML 中繼資料中的任何憑證相符,則您的使用者集區會判斷 SAML 聲明有效。

使用 SAML 來自訂您的使用者角色

搭配 Amazon Cognito Identity 使用 SAML,您可以為最終使用者自訂角色。Amazon Cognito 僅支援基於 SAML 之 IdP 的增強型流程。您不需要為身分集區指定已驗證或未驗證的角色,就能使用 SAML 型 IdP。https://aws.amazon.com/SAML/Attributes/Role宣告屬性會指定一或多組以逗號分隔的角色和供應商 ARN。這些都是使用者可以擔任的角色。您可以設定 SAML IdP 以根據 IdP 提供的使用者屬性資訊來填入角色屬性。如果您在 SAML 聲明中收到多個角色,則在呼叫 customRoleArn 時,應填入選擇性的 getCredentialsForIdentity 參數。如果該角色符合 SAML 聲明中宣告的角色,則使用者會擔任此 customRoleArn

使用 SAML IdP 驗證使用者身分

若要與 SAML 型 IdP 建立聯合,請決定使用者起始登入的 URL。 AWS 同盟會使用 IDP 起始的登入。在 AD FS 2.0 中,URL 採用的格式為 https://<fqdn>/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices

若要在 Amazon Cognito 中新增對 SAML IdP 的支援,必須先從您的 iOS 或 Android 應用程式,使用您的 SAML 身分提供者來驗證使用者身分。用來透過 SAML IdP 進行整合和身分驗證的代碼是 SAML 供應商所特有的。在您對使用者進行身分驗證之後,便可以使用 Amazon Cognito API 將所產生的 SAML 聲明提供給 Amazon Cognito Identity。

您無法在身分識別集區 API 要求的 Logins 對應中重複或重新顯示 SAML 宣告。重新顯示的 SAML 宣告具有重複先前 API 要求 ID 的宣告 ID。可以在對應中接受 SAML 宣告的 API 作業包括GetIdGetCredentialsForIdentityGetOpenIdToken、和GetOpen識別碼。Logins TokenForDeveloperIdentity您可以在身分識別集區驗證流程中的每個 API 要求重新顯示一次 SAML 宣告 ID。例如,您可以在 GetId 要求和後續 GetCredentialsForIdentity 要求中提供相同的 SAML 宣告,但不能在第二個 GetId 要求中提供。

Android

如果您是使用 Android 開發套件,您可以使用 SAML 聲明來填入登入對應,如下所示。

Map logins = new HashMap(); logins.put("arn:aws:iam::aws account id:saml-provider/name", "base64 encoded assertion response"); // Now this should be set to CognitoCachingCredentialsProvider object. CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(context, identity pool id, region); credentialsProvider.setLogins(logins); // If SAML assertion contains multiple roles, resolve the role by setting the custom role credentialsProvider.setCustomRoleArn("arn:aws:iam::aws account id:role/customRoleName"); // This should trigger a call to the Amazon Cognito service to get the credentials. credentialsProvider.getCredentials();

iOS

如果您是使用 iOS 開發套件,您可以在 AWSIdentityProviderManager中提供 SAML 聲明,如下所示。

- (AWSTask<NSDictionary<NSString*,NSString*> *> *) logins { //this is hardcoded for simplicity, normally you would asynchronously go to your SAML provider //get the assertion and return the logins map using a AWSTaskCompletionSource return [AWSTask taskWithResult:@{@"arn:aws:iam::aws account id:saml-provider/name":@"base64 encoded assertion response"}]; } // If SAML assertion contains multiple roles, resolve the role by setting the custom role. // Implementing this is optional if there is only one role. - (NSString *)customRoleArn { return @"arn:aws:iam::accountId:role/customRoleName"; }