使用 Amazon Cognito Identity 验证用户身份 - Amazon SDK for JavaScript
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 Amazon Cognito Identity 验证用户身份

获取浏览器脚本 Amazon 凭证的推荐方法是使用 Amazon Cognito Identity 凭证对象 AWS.CognitoIdentityCredentials。Amazon Cognito 支持通过第三方身份提供商对用户进行身份验证。

要使用 Amazon Cognito Identity,您必须先在 Amazon Cognito 控制台中创建一个身份池。身份池表示应用程序为用户提供的身份组。为用户提供的身份唯一地标识每个用户账户。Amazon Cognito 身份并不是凭证。可以在 Amazon Security Token Service (Amazon STS) 中使用 Web 联合身份验证支持为凭证交换这些身份。

Amazon Cognito 使用 AWS.CognitoIdentityCredentials 对象帮助您管理跨多个身份提供商的身份抽象。然后,在 Amazon STS 中为凭证交换加载的身份。

配置 Amazon Cognito Identity 凭证对象

如果您尚未创建身份池,则在配置 AWS.CognitoIdentityCredentials 之前,请先创建一个,以与 Amazon Cognito 控制台中的浏览器脚本一起使用。为身份池创建并关联经过身份验证和未经身份验证的 IAM 角色。

未经身份验证的用户的身份未经过验证,因此,该角色很适合您的应用程序的来宾用户或用户身份验证与否无关紧要的情形。经过身份验证的用户可以通过证实其身份的第三方身份提供商登录到您的应用程序。确保您的资源的权限范围适当,让未经身份验证的用户无权访问这些资源。

通过关联的身份提供商配置身份池后,您可以使用 AWS.CognitoIdentityCredentials 验证用户身份。要将应用程序凭证配置为使用 AWS.CognitoIdentityCredentials,则为 credentials 或基于每个服务配置设置 AWS.Config 属性。以下示例使用 AWS.Config

AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030', Logins: { // optional tokens, used for authenticated login 'graph.facebook.com': 'FBTOKEN', 'www.amazon.com': 'AMAZONTOKEN', 'accounts.google.com': 'GOOGLETOKEN' } });

可选的 Logins 属性是身份提供商名称到这些提供商身份令牌的映射。您如何从身份提供商获得令牌的方式取决于您使用的提供商。例如,如果 Facebook 是您的身份提供商之一,则您可以使用来自 Facebook 软件开发工具包FB.login 函数获取身份提供商令牌:

FB.login(function (response) { if (response.authResponse) { // logged in AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030', Logins: { 'graph.facebook.com': response.authResponse.accessToken } }); s3 = new AWS.S3; // we can now create our service object console.log('You are now logged in.'); } else { console.log('There was a problem logging you in.'); } });

将未经身份验证的用户切换为经过身份验证的用户

Amazon Cognito 同时支持经过身份验证的用户和未经身份验证的用户。即使未经身份验证的用户不通过任何身份提供商登录,这些用户也有权访问您的资源。此级别的访问可用于向尚未登录的用户显示内容。即使每个未经身份验证的用户尚未单独登录和经过身份验证,这些用户在 Amazon Cognito 中也都具有唯一的身份。

最初未经身份验证的用户

用户通常从未经身份验证的角色开始,为此需要设置配置对象的凭证属性而不是 Logins 属性。在这种情况下,您的默认配置可能如下所示:

// set the default config object var creds = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030' }); AWS.config.credentials = creds;

切换为经过身份验证的用户

当未经身份验证的用户登录身份提供商并且您拥有令牌时,您可以通过调用可更新凭证对象和添加 Logins 令牌的自定义函数,来将用户从未经身份验证的用户切换为经过身份验证的用户:

// Called when an identity provider has a token for a logged in user function userLoggedIn(providerName, token) { creds.params.Logins = creds.params.Logins || {}; creds.params.Logins[providerName] = token; // Expire credentials to refresh them on the next request creds.expired = true; }

您还可以创建 CognitoIdentityCredentials 对象。如果这样做,则必须重置您创建的现有服务对象的凭证属性。仅在对象初始化时从全局配置读取服务对象。

有关 CognitoIdentityCredentials 对象的更多信息,请参阅 Amazon SDK for JavaScript API 参考中的 AWS.CognitoIdentityCredentials