本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將SAML提供者設定為身分集區 IdP
使用 Amazon Cognito 身分集區,您可以透過身分提供者 (IdPs) 到 2.0 SAML 來驗證使用者。您可以使用支援 SAML Amazon Cognito 的 IdP,為您的使用者提供簡單的入門流程。SAML支援 的 IdP 會指定使用者可擔任IAM的角色。如此一來,不同的用戶可以收到不同的許可集。
設定 IdP SAML 的身分集區
下列步驟說明如何將身分集區設定為使用 SAML型 IdP 。
注意
在設定身分集區以支援SAML提供者之前,請先在IAM主控台
新增SAML身分提供者 IdP)
-
從 Amazon Cognito 主控台
選擇 身分池。選取身分池。 -
選擇 使用者存取權 索引標籤。
-
選取 新增身分供應商。
-
選擇 SAML。
-
從 IAM IdPs 中的 中選擇SAML身分提供者 AWS 帳戶。如果您想要新增SAML提供者,請選擇建立新提供者以導覽至IAM主控台。
-
若要設定 Amazon Cognito 向已通過此提供者進行身分驗證的使用者發布憑證時的角色,請設定 角色設定。
-
您可以為該 IdP 使用者指派設定 已驗證角色 時的 預設角色,或您可以 選擇具有規則的角色。
-
如果您選擇 使用規則選擇角色,請輸入使用者身分驗證的 宣告 來源、比較宣告的 操作員、導致符合角色選擇的 值,以及當符合 角色指派 時您要指派的 角色。選取 新增另一項 以根據不同的條件建立其他規則。
-
選擇 角色解析。當您的使用者宣告與您的規則不符時,您可以拒絕憑證或向 已驗證角色 發出憑證。
-
-
-
若要變更透過此提供者驗證使用者,Amazon Cognito 發布憑證時指派的主要索引標籤,請設定 存取控制的屬性。
-
若不套用主要索引標籤,請選擇 非作用中。
-
若要根據
sub
和aud
宣告套用主要索引標籤,請選擇 使用預設對應。 -
若要建立您自己的自訂屬性結構描述至主要索引標籤,請選擇 使用自訂對應。然後,輸入您要從每個 宣告 中獲取的 標籤金鑰,顯示於索引標籤當中。
-
-
選取儲存變更。
設定您的 SAML IdP
建立SAML提供者之後,請設定您的 SAML IdP 以新增 IdP 和 之間的依賴方信任 AWS。對於許多 IdPs,您可以指定 IdP URL 可用來從XML文件中讀取依賴方資訊和憑證的 。對於 AWS,您可以使用 https://signin.aws.amazon.com/static/saml-metadata.xml
當您的 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
參數getCredentialsForIdentity
。customRoleArn
如果角色符合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宣告的 操作包括 GetId、GetOpenIdToken、 GetCredentialsForIdentity和 GetOpenIDTokenForDeveloperIdentity。您可以在身分集區身分驗證流程中為每個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"; }