使用 Web 身份联合验证编写应用程序 - Amazon DynamoDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 Web 身份联合验证编写应用程序

要使用 Web 联合身份验证,应用程序必须代入您创建的 IAM 角色。这样,应用程序将遵守您附加到该角色的访问策略。

在运行期间,如果您的应用程序使用 Web 联合身份验证,它必须遵循以下步骤:

  1. 使用第三方身份提供商进行身份验证。您的应用程序必须使用身份提供商提供的接口对其进行调用。验证用户身份的确切方式取决于提供商和运行应用程序的平台。通常,如果用户尚未登录,则身份提供商负责显示该提供商的登录页面。

    身份提供商验证用户身份后,将向应用程序返回一个 Web 身份验证令牌。此令牌格式取决于提供商,但是,一般是非常长的字符串。

  2. 获取临时 Amazon 安全凭证。要完成此操作,您的应用程序要向 Amazon Security Token Service (Amazon STS) 发送一个 AssumeRoleWithWebIdentity 请求。此请求包含以下内容:

    • 从之前步骤获取的 Web 身份验证令牌

    • 从身份提供商获取的应用程序 ID。

    • 您为此应用程序身份提供商创建的 IAM 角色的 Amazon Resource Name (ARN)

    Amazon STS 会返回一组在一定时间后过期的 Amazon 安全凭证(默认情况下是 3600 秒后过期)。

    下面是一个示例请求和 Amazon STS 中 AssumeRoleWithWebIdentity 操作的响应。Web 身份验证令牌是从 Login with Amazon 身份提供商获取的。

    GET / HTTP/1.1 Host: sts.amazonaws.com Content-Type: application/json; charset=utf-8 URL: https://sts.amazonaws.com/?ProviderId=www.amazon.com &DurationSeconds=900&Action=AssumeRoleWithWebIdentity &Version=2011-06-15&RoleSessionName=web-identity-federation &RoleArn=arn:aws:iam::123456789012:role/GameRole &WebIdentityToken=Atza|IQEBLjAsAhQluyKqyBiYZ8-kclvGTYM81e...(remaining characters omitted)

    <AssumeRoleWithWebIdentityResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/"> <AssumeRoleWithWebIdentityResult> <SubjectFromWebIdentityToken>amzn1.account.AGJZDKHJKAUUSW6C44CHPEXAMPLE</SubjectFromWebIdentityToken> <Credentials> <SessionToken>AQoDYXdzEMf//////////wEa8AP6nNDwcSLnf+cHupC...(remaining characters omitted)</SessionToken> <SecretAccessKey>8Jhi60+EWUUbbUShTEsjTxqQtM8UKvsM6XAjdA==</SecretAccessKey> <Expiration>2013-10-01T22:14:35Z</Expiration> <AccessKeyId>06198791C436IEXAMPLE</AccessKeyId> </Credentials> <AssumedRoleUser> <Arn>arn:aws:sts::123456789012:assumed-role/GameRole/web-identity-federation</Arn> <AssumedRoleId>AROAJU4SA2VW5SZRF2YMG:web-identity-federation</AssumedRoleId> </AssumedRoleUser> </AssumeRoleWithWebIdentityResult> <ResponseMetadata> <RequestId>c265ac8e-2ae4-11e3-8775-6969323a932d</RequestId> </ResponseMetadata> </AssumeRoleWithWebIdentityResponse>
  3. 访问 Amazon 资源。Amazon STS 的响应包含访问 DynamoDB 资源时您的应用程序所需的信息:

    • AccessKeyIDSecretAccessKeySessionToken 字段包含的安全凭证仅对此用户和此应用程序有效。

    • Expiration 字段标明了这些凭证的时间限制,超出时间后,凭证将不再有效。

    • AssumedRoleId 字段包含应用程序代入的会话特定 IAM 角色的名称。应用程序将遵守 IAM 策略文档中针对会话持续期间的访问控制。

    • SubjectFromWebIdentityToken 字段包含显示在此特定身份提供商的 IAM 策略变量中的唯一 ID。下面是支持的提供商的 IAM 策略变量以及一些示例值:

      策略变量 示例值
      ${www.amazon.com:user_id} amzn1.account.AGJZDKHJKAUUSW6C44CHPEXAMPLE
      ${graph.facebook.com:id} 123456789
      ${accounts.google.com:sub} 123456789012345678901

有关使用这些策略变量的示例 IAM policy,请参阅策略示例:使用条件实现精细访问控制

有关 Amazon STS 如何生成临时安全凭证的更多信息,请参阅 IAM 用户指南中的请求临时安全凭证