使用 Web 联合身份验证来验证用户身份 - AWS SDK for JavaScript

我们已宣布即将终止对 AWS SDK for JavaScript v2 的支持。建议您迁移到 AWS SDK for JavaScript v3。有关日期、其他详细信息以及如何迁移的信息,请参阅链接的公告。

使用 Web 联合身份验证来验证用户身份

您可以使用 Web 身份联合验证直接配置各个身份提供商以访问 AWS 资源。AWS 目前支持通过多个身份提供商使用 Web 身份联合验证来验证用户身份:

您必须首先向您的应用程序支持的提供商注册您的应用程序。接下来,创建 IAM 角色并为其设置权限。然后,您创建的 IAM 角色将通过相应的身份提供商授予您为其配置的权限。例如,您可以设置一个角色,允许通过 Facebook 登录的用户对您控制的特定 Amazon S3 桶具有读取权限。

有了配置了权限的 IAM 角色以及向所选身份提供商注册的应用程序之后,您可以将 SDK 设置为使用帮助程序代码获取 IAM 角色的凭证,如下所示:

AWS.config.credentials = new AWS.WebIdentityCredentials({ RoleArn: 'arn:aws:iam::<AWS_ACCOUNT_ID>/:role/<WEB_IDENTITY_ROLE_NAME>', ProviderId: 'graph.facebook.com|www.amazon.com', // this is null for Google WebIdentityToken: ACCESS_TOKEN });

ProviderId 参数中的值取决于指定的身份提供商。WebIdentityToken 参数中的值是从使用身份提供商成功登录时检索的访问令牌。有关如何为每个身份提供商配置和检索访问令牌的更多信息,请参阅身份提供商的相关文档。

步骤 1:向身份提供商注册

首先,向您选择支持的身份提供商注册应用程序。系统会要求您提供信息来标识您的应用程序以及作者(在可能的情况下)。这可以确保身份提供商知道谁正在接收他们的用户信息。在每种情况下,身份提供商将发出用于配置用户角色的应用程序 ID。

步骤 2:为身份提供商创建 IAM 角色

从身份提供商获取应用程序 ID 后,转到 IAM 控制台(地址:https://console.aws.amazon.com/iam/)以创建新的 IAM 角色。

为身份提供商创建 IAM 角色
  1. 转到控制台的角色部分,然后选择创建新角色

  2. 键入新角色的名称,以帮助您跟踪其使用情况,例如 facebookIdentity,然后选择下一步

  3. 选择角色类型中,选择用于身份提供商访问的角色

  4. 对于授予 Web 身份提供商访问权限,选择选择

  5. 身份提供商列表中,选择要为此 IAM 角色使用的身份提供商。

    选择“用于身份提供商访问的角色”。
  6. 应用程序 ID 中键入身份提供商提供的应用程序 ID,然后选择下一步

  7. 配置要公开的资源的权限,以允许访问特定资源上的特定操作。有关 IAM 权限的更多信息,请参阅《IAM 用户指南》中的 AWS IAM 权限概述。查看并根据需要自定义角色的信任关系,然后选择下一步

  8. 附加您需要的其他政策,然后选择下一步。有关 IAM policy 的更多信息,请参阅《IAM 用户指南》中的 IAM policy 概述

  9. 检查新角色,然后选择创建角色

您可以为角色提供其他约束,例如将其限定为特定用户 ID。如果角色授予对资源的写入权限,请确保正确地将角色限定为具有正确权限的用户,否则具有 Amazon、Facebook 或 Google 身份的任何用户都将能够修改应用程序中的资源。

有关在 IAM 中使用 Web 身份联合验证的更多信息,请参阅《IAM 用户指南》中的关于 Web 身份联合验证

步骤 3:登录后获取提供商访问令牌

使用身份提供商的开发工具包为您的应用程序设置登录操作。您可以使用 OAuth 或 OpenID 从身份提供商下载并安装允许用户登录的 JavaScript 开发工具包。有关如何在应用程序中下载和设置开发工具包代码的信息,请参阅身份提供商的开发工具包文档:

步骤 4:获取临时凭证

在配置应用程序、角色和资源权限后,将代码添加到应用程序以获取临时凭证。通过 AWS Security Token Service 使用 Web 联合身份验证提供这些凭证。用户登录到身份提供商,该提供商返回访问令牌。针对您为此身份提供者创建的 IAM 角色,使用 ARN 设置 AWS.WebIdentityCredentials 对象:

AWS.config.credentials = new AWS.WebIdentityCredentials({ RoleArn: 'arn:aws:iam::<AWS_ACCOUNT_ID>:role/<WEB_IDENTITY_ROLE_NAME>', ProviderId: 'graph.facebook.com|www.amazon.com', // Omit this for Google WebIdentityToken: ACCESS_TOKEN // Access token from identity provider });

随后创建的服务对象将具有适当的凭证。在设置 AWS.config.credentials 属性之前创建的对象将不具有当前凭证。

您还可以在检索访问令牌之前创建 AWS.WebIdentityCredentials。这允许您在加载访问令牌之前创建依赖于凭证的服务对象。为此,请在不使用 WebIdentityToken 参数的情况下创建凭证对象:

AWS.config.credentials = new AWS.WebIdentityCredentials({ RoleArn: 'arn:aws:iam::<AWS_ACCOUNT_ID>:role/<WEB_IDENTITY_ROLE_NAME>', ProviderId: 'graph.facebook.com|www.amazon.com' // Omit this for Google }); // Create a service object var s3 = new AWS.S3;

然后,在包含访问令牌的身份提供商开发工具包的回调中设置 WebIdentityToken

AWS.config.credentials.params.WebIdentityToken = accessToken;