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

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

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

使用 Amazon Cognito 身分集區,您可以透過身分提供者 (IdPs) 到 2.0 SAML 來驗證使用者。您可以使用支援 SAML Amazon Cognito 的 IdP,為您的使用者提供簡單的入門流程。SAML支援 的 IdP 會指定使用者可擔任IAM的角色。如此一來,不同的用戶可以收到不同的許可集。

設定 IdP SAML 的身分集區

下列步驟說明如何將身分集區設定為使用 SAML型 IdP 。

注意

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

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

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

  3. 選取 新增身分供應商

  4. 選擇 SAML

  5. 從 IAM IdPs 中的 中選擇SAML身分提供者 AWS 帳戶。如果您想要新增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 URL 可用來從XML文件中讀取依賴方資訊和憑證的 。對於 AWS,您可以使用 https://signin.aws.amazon.com/static/saml-metadata.xml 。下一步是設定來自 IdP 的SAML宣告回應,以填入 AWS 需要的宣告。如需宣告組態的詳細資訊,請參閱設定身分驗證回應的SAML宣告

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

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

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

使用 SAML IdP 驗證使用者

若要與 SAML型 IdP 聯合,請判斷使用者起始 login. AWS federation URL的位置,使用 IdP 起始的登入。在 AD FS 2.0 中, URL採用 的形式https://<fqdn>/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices

若要在 SAML Amazon Cognito 中新增對 IdP 的支援,請先從您的 iOS 或 Android 應用程式向SAML身分提供者驗證使用者。您用來與 IdP SAML 整合和驗證的程式碼,是SAML提供者特有的。驗證使用者後,您可以使用 Amazon Cognito APIs將產生的SAML聲明提供給 Amazon Cognito Identity 。

您無法在身分集區API請求的Logins映射中重複或重播 SAML 宣告。重播的SAML宣告具有宣告 ID,該 ID 會複製先前API請求的 ID。API 可接受Logins映射中SAML宣告的 操作包括 GetIdGetOpenIdTokenGetCredentialsForIdentityGetOpenIDTokenForDeveloperIdentity。您可以在身分集區身分驗證流程中為每個API請求重播SAML宣告 ID 一次。例如,您可以在GetId請求和後續GetCredentialsForIdentity請求中提供相同的SAML聲明,但無法在第二個GetId請求中提供。

Android

如果您使用 Android SDK,則可以將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 SDK,您可以在 中提供SAML宣告AWSIdentityProviderManager,如下所示。

- (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"; }