将SAML提供商设置为身份池 IdP - Amazon Cognito

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将SAML提供商设置为身份池 IdP

借助 Amazon Cognito 身份池,您可以在 2.0 之前使用身份提供商 (IdPs) 对用户进行身份验证。SAML您可以使用支持 SAML Amazon Cognito 的 IdP 为您的用户提供简单的入门流程。您SAML支持的 IdP 指定IAM了您的用户可以扮演的角色。这样,不同的用户可以获得不同的权限集。

为 I SAML dP 配置您的身份池

以下步骤介绍如何配置您的身份池以使用SAML基于基础的 IdP。

添加SAML身份提供者 (IdP)
  1. Amazon Cognito 控制台中选择身份池。选择身份池。

  2. 选择用户访问选项卡。

  3. 选择添加身份提供者

  4. 选择SAML

  5. 从您的中选择一个SAML身份提供商 AWS 账户。IAM IdPs 如果要添加新的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 man XML y,则可以指定 IdP 可以用来从文档中读取信赖方信息和证书。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 一起使用时,您可以为最终用户自定义角色。Amazon Cognito 仅支持基于基础的 SAML IdP 的增强流程。您无需为身份池指定经过身份验证或未经身份验证的角色即可使用SAML基于身份的 IdP。cl https://aws.amazon.com/SAML/Attributes/Role aim 属性指定一对或多对以逗号分隔的角色和提供者。ARN这些是用户可以担任的角色。您可以将 SAML IdP 配置为基于 IdP 提供的用户属性信息填充角色属性。如果您在SAML断言中收到多个角色,请在调用时填充可选customRoleArn参数。getCredentialsForIdentitycustomRoleArn如果该角色与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断言的操作包括GetIdGetCredentialsForIdentityGetOpenIdToken、和。GetOpenIDTokenForDeveloperIdentity在身份池身份验证流程中,每个API请求可以重播一次SAML断言 ID。例如,您可以在GetId请求和后续请求中提供相同的SAML断言,但不能在第二个GetCredentialsForIdentityGetId请求中提供相同的断言。

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