JavaScript中的AWS身份验证

问题描述 投票:0回答:1

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

我已对其进行了结构化,以便当用户在没有令牌的情况下进入页面时,会发生以下一系列步骤:

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

我希望在我的应用程序中有两个用户角色:用户和管理员。不应允许用户呼叫任何AWS服务,其中应允许管理员代表其公司创建/邀请并将其他用户提升为管理员。

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

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角色与身份池相关联,而不是用户本身。

有没有简单的方法来实现这一目标?

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

amazon-web-services aws-sdk role-base-authorization
1个回答
0
投票

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

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

在我的情况下,我为所有经过身份验证的用户提供了User的角色,并创建了下图所示的条件,该条件授予所有在“custom:role”中具有“admin”值的用户Admin的角色。

Identity Pool control panel

© www.soinside.com 2019 - 2024. All rights reserved.