使用 Web 身份联合验证编写应用程序
要使用 Web 联合身份验证,应用程序必须代入您创建的 IAM 角色。这样,应用程序将遵守您附加到该角色的访问策略。
在运行期间,如果您的应用程序使用 Web 联合身份验证,它必须遵循以下步骤:
-
使用第三方身份提供商进行身份验证。您的应用程序必须使用身份提供商提供的接口对其进行调用。验证用户身份的确切方式取决于提供商和运行应用程序的平台。通常,如果用户尚未登录,则身份提供商负责显示该提供商的登录页面。
身份提供商验证用户身份后,将向应用程序返回一个 Web 身份验证令牌。此令牌格式取决于提供商,但是,一般是非常长的字符串。
-
获取临时 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>
-
-
访问 Amazon 资源。Amazon STS 的响应包含访问 DynamoDB 资源时您的应用程序所需的信息:
-
AccessKeyID
、SecretAccessKey
和SessionToken
字段包含的安全凭证仅对此用户和此应用程序有效。 -
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 策略,请参阅策略示例:使用条件实现精细访问控制。
有关 Amazon STS 如何生成临时安全凭证的更多信息,请参阅《IAM 用户指南》中的请求临时安全凭证。