AWS Identity and Access Management
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

对移动应用程序使用 Web 联合身份验证 API 操作

为了获得最佳结果,请使用 Amazon Cognito 作为几乎所有 Web 联合身份验证方案的身份代理。Amazon Cognito 易于使用并提供了额外功能,如匿名 (未经身份验证的) 访问,并且跨设备和提供商同步用户数据。但是,如果您已通过手动调用 AssumeRoleWithWebIdentity API 创建了使用 Web 联合身份验证的应用程序,也可继续使用它,您的应用程序仍能正常工作。

注意

为帮助您了解 Web 联合身份验证的工作方式,可使用 Web Identity Federation Playground。该交互式网站演练如下身份验证过程:通过 Login with Amazon、Facebook 或 Google 获得临时安全凭证,然后使用这些证书向 AWS 提出请求。

在不使用 Amazon Cognito 的情况下使用 Web 联合身份验证的过程遵循此概要:

  1. 以开发人员身份注册到 IdP,然后使用向您提供应用程序的唯一 ID 的 IdP 来配置您的应用程序。(不同的 IdP 使用不同的术语表示此过程。此概要使用配置 一词表示通过 IdP 标识应用程序的过程。)每个 IdP 均提供一个对于该 IdP 独一无二的应用程序 ID,因此如果按多个 IdP 的要求配置同一应用程序,则该应用程序将有多个应用程序 ID。可按每个提供商的要求配置多个应用程序。

    以下外部链接提供有关使用一些常用身份提供商的信息:

    注意

    虽然 Amazon Cognito 和 Google 都基于 OIDC 技术,但您无需在 IAM 中创建身份提供商实体来使用它们。对 Amazon Cognito 和 Google 的支持已内置到 AWS 中。

  2. 如果您使用与 OIDC 兼容的 IdP,请在 IAM 中为其创建身份提供商实体。

  3. 在 IAM 中,创建一个或多个角色。对于每个角色,定义谁可代入该角色 (信任策略) 和应用程序的用户将具有什么权限 (权限策略)。通常,您为应用程序支持的每个 IdP 创建一个角色。例如,可创建一个在用户通过 Login with Amazon 登录时应用程序代入的角色,为同一应用程序再创建第二个角色,其中用户通过 Facebook 登录,然后为该应用程序创建第三个角色,其中用户通过 Google 登录。对于信任关系,指定 IdP (如 Amazon.com) 作为 Principal (可信实体),并加入一个与 IdP 分配的应用程序 ID 匹配的 Condition。本主题稍后将介绍不同提供商的角色示例。

  4. 在应用程序中,通过 IdP 验证用户身份。执行此操作的方式的详情因您所使用的 IdP (Login with Amazon、Facebook 或 Google) 和运行应用程序的平台而异。例如,Android 应用程序的身份验证方式与 iOS 应用程序或基于 JavaScript 的 Web 应用程序的不同。

    通常,如果用户尚未登录,则 IdP 负责显示登录页面。Idp 在对用户进行身份验证后,会将身份验证令牌与用户相关信息一起返回到您的应用程序。包含的信息取决于 IdP 公开的内容和用户愿意共享的信息。可在应用程序中使用这些信息。

  5. 在应用程序中,对 操作进行未签名 AssumeRoleWithWebIdentity 调用以请求临时安全凭证。在该请求中,传递 IdP 的身份验证令牌,然后指定为该 IdP 创建的 IAM 角色的 Amazon 资源名称 (ARN)。AWS 将验证令牌是否可信和有效,如果是这样,则会将临时安全凭证返回到具有从您在请求中命名的角色的权限的应用程序。响应中还包括来自 IdP 的用户相关元数据,例如,IdP 将其与用户关联的唯一用户 ID。

  6. 通过使用来自 AssumeRoleWithWebIdentity 响应的临时安全凭证,应用程序向 AWS API 操作发出已签名的请求。身份提供商提供的用户 ID 信息可在您的应用程序中区分用户,例如,可将对象放入以用户 ID 作为前缀或后缀的 Amazon S3 文件夹。这样可创建锁定该文件夹的访问控制策略,以使仅具有该 ID 的用户能够访问该文件夹。有关更多信息,请参阅本主题后面的 使用 Web 联合身份验证识别用户的身份

  7. 您的应用程序应缓存临时安全凭证,这样您就不需要每次在应用程序需要对 AWS 发出请求时获取新凭证。默认情况下,凭证的有效期为 1 小时。当证书到期时 (或在此之前),再次调用 AssumeRoleWithWebIdentity 以获取新的一组临时安全凭证。根据 IdP 及其管理其令牌的方式,可能必须先刷新 IdP 的令牌,然后再对 AssumeRoleWithWebIdentity 进行新的调用,因为 IdP 的令牌通常也在固定的一定时间后到期。如果使用的是适用于 iOS 的 AWS 软件开发工具包或适用于 Android 的 AWS 软件开发工具包,则可使用 AmazonSTSCredentialsProvider 操作,该操作管理 IAM 临时凭证,包括按需刷新凭证。