我们已宣布
使用 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 角色
-
转到控制台的角色部分,然后选择创建新角色。
-
键入新角色的名称,以帮助您跟踪其使用情况,例如
facebookIdentity
,然后选择下一步。 -
在选择角色类型中,选择用于身份提供商访问的角色。
-
对于授予 Web 身份提供商访问权限,选择选择。
-
在身份提供商列表中,选择要为此 IAM 角色使用的身份提供商。
-
在应用程序 ID 中键入身份提供商提供的应用程序 ID,然后选择下一步。
-
配置要公开的资源的权限,以允许访问特定资源上的特定操作。有关 IAM 权限的更多信息,请参阅《IAM 用户指南》中的 AWS IAM 权限概述。查看并根据需要自定义角色的信任关系,然后选择下一步。
-
附加您需要的其他政策,然后选择下一步。有关 IAM policy 的更多信息,请参阅《IAM 用户指南》中的 IAM policy 概述。
-
检查新角色,然后选择创建角色。
您可以为角色提供其他约束,例如将其限定为特定用户 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;