JavaScript 中的 AWS 身份验证

AWS Authentication in JavaScript

我正在开发一个带有 REST 后端的单页应用程序,该应用程序使用 AWS Cognito 进行用户管理和身份验证。

我的结构是这样的,当用户在没有令牌的情况下进入页面时,会发生以下一系列步骤:

  1. 重定向到 Cognito 的默认登录页面
  2. 用户登录并被重定向到主机/authenticate.html
  3. 一个 AJAX 调用被发送到 Cognito 的令牌端点,returns 用户的令牌。这些存储在 sessionStorage
  4. 用户被重定向到 Web 应用程序,现在已通过身份验证

我想在我的应用程序中有两个用户角色:UsersAdmins。不应允许 用户 调用任何 AWS 服务,而应允许 管理员 create/invite 并将其他用户提升为管理员代表他的公司。

目前我已经为用户池和网络应用程序设置了一个身份池,启用了管理员权限。我使用以下代码对身份池进行身份验证:

AWS.config.region = "eu-central-1";
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'eu-central-1:<my-indentitypool-id>',
    Logins: {
        'cognito-idp.eu-central-1.amazonaws.com/<my-userpool-id>':
            sessionStorage.getItem('id_token')
    }
});

AWS.config.credentials.get(function(err){
    if (err) {
        console.error(err);
    }
    console.log("Authenticated");
    cisp = new AWS.CognitoIdentityServiceProvider();

});

当管理员想要创建用户时:

cisp.adminCreateUser(params, function(err, data) {
    if (err) 
        console.log(err, err.stack);
    else
        console.log(data);
});

但是,根据我的理解,这将允许 Web 应用程序的所有用户拥有 Admin 权限,因为 IAM 角色与身份池而不是用户相关联本身

有什么简单的方法可以做到这一点吗?

如有任何不清楚的地方,请随时提出问题,在此先感谢您的帮助。

我最终找到了解决方案。如果有人遇到与我相同的问题,您可以转到 Cognito Identity Pool 的仪表板并进行编辑。

有一个名为 身份验证提供程序 的部分,您可以在其中指定声明的条件并根据该条件指定角色。在同一页面上,您还可以编辑为未通过身份验证的用户提供的角色以及为通过身份验证但不满足您指定的任何条件的用户提供的默认角色。

在我的例子中,我为所有经过身份验证的用户赋予了 User 的角色,并创建了下图所示的条件,该条件授予所有值为 [=25= 的用户] 在 "custom:role" Admin.

的角色