Amazon DynamoDB
开发人员指南 (API Version 2012-08-10)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

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

要使用 Web 联合身份验证,应用程序必须采用您创建的 IAM 角色;从那时起,应用程序将遵守您附加到该角色的访问策略。

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

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

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

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

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

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

    • 您为此应用程序身份提供商创建的 IAM 角色的 Amazon 资源名称 (ARN)

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

    下面是一个示例请求和 AWS 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. 访问 AWS 资源。AWS 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 策略,请参阅策略示例:使用条件实现精细访问控制

有关 AWS Security Token Service 如何生成临时访问凭证的更多信息,请参阅 IAM 用户指南 中的申请临时安全凭证