本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将SAML提供商设置为身份池 IdP
借助 Amazon Cognito 身份池,您可以在 2.0 之前使用身份提供商 (IdPs) 对用户进行身份验证。SAML您可以使用支持 SAML Amazon Cognito 的 IdP 为您的用户提供简单的入门流程。您SAML支持的 IdP 指定IAM了您的用户可以扮演的角色。这样,不同的用户可以获得不同的权限集。
为 I SAML dP 配置您的身份池
以下步骤介绍如何配置您的身份池以使用SAML基于基础的 IdP。
注意
在配置身份池以支持SAML提供商之前,请先在控制台中配置 SAML IdP。IAM
添加SAML身份提供者 (IdP)
-
从 Amazon Cognito 控制台
中选择身份池。选择身份池。 -
选择用户访问选项卡。
-
选择添加身份提供者。
-
选择SAML。
-
从您的中选择一个SAML身份提供商 AWS 账户。IAM IdPs 如果要添加新的SAML提供商,请选择 “创建新提供商” 以导航到IAM控制台。
-
要设置 Amazon Cognito 在向通过该提供者进行身份验证的用户颁发凭证时请求的角色,请配置角色设置。
-
您可以为该 IdP 中的用户分配您在配置经过身份验证的角色时设置的原定设置角色,也可以使用规则选择角色。
-
如果您选择使用规则选择角色,请输入用户身份验证中的来源声明、您要用来比较声明的运算符、导致与该角色选择匹配的值,以及当角色分配匹配时要分配的角色。选择添加其他,以根据不同的条件创建其他规则。
-
选择角色解析。当用户的声明与您的规则不匹配时,您可以拒绝凭证或为经过身份验证的角色颁发凭证。
-
-
-
要更改 Amazon Cognito 在向通过该提供者进行身份验证的用户颁发凭证时分配的主体标签,请配置访问控制属性。
-
如果不应用主体标签,请选择非活动。
-
要基于
sub
和aud
声明应用主体标签,请选择使用原定设置映射。 -
要为主体标签创建自己的自定义属性模式,请选择使用自定义映射。然后,对于您要在标签中表示的每个声明,输入要从该声明中获取的标签键。
-
-
选择保存更改。
配置你的 SAML IdP
创建SAML提供商后,将您的 SAML IdP 配置为在您的 IdP 和之间添加信赖方信任。 AWS如果有 IdPs man XML y,则可以指定 IdP 可以用来从文档中读取信赖方信息和证书。URL对于 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。cl https://aws.amazon.com/SAML/Attributes/Role
aim 属性指定一对或多对以逗号分隔的角色和提供者。ARN这些是用户可以担任的角色。您可以将 SAML IdP 配置为基于 IdP 提供的用户属性信息填充角色属性。如果您在SAML断言中收到多个角色,请在调用时填充可选customRoleArn
参数。getCredentialsForIdentity
customRoleArn
如果该角色与SAML断言中声明中的一个角色相匹配,则用户假设该角色。
使用 IdP 对用户进行SAML身份验证
要与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 APIs 向亚马逊 Cognito Identity 提供生成的SAML断言。
您不能在身份池API请求Logins
地图中SAML重复或重播断言。重播的SAML断言的断言 ID 与先前请求的 ID 重复。APIAPI可以在Logins
地图中接受SAML断言的操作包括GetId、GetCredentialsForIdentityGetOpenIdToken、和。GetOpenIDTokenForDeveloperIdentity在身份池身份验证流程中,每个API请求可以重播一次SAML断言 ID。例如,您可以在GetId
请求和后续请求中提供相同的SAML断言,但不能在第二个GetCredentialsForIdentity
GetId
请求中提供相同的断言。
Android
如果您使用 AndroidSDK,则可以在登录地图中填充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
如果您使用的是 iOSSDK,则可以在中提供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"; }