我正在开发一个带有 REST 后端的单页应用程序,该后端使用 AWS Cognito 进行用户管理和身份验证。
我的结构是这样的,当用户在没有令牌的情况下进入页面时,会发生以下一系列步骤:
- 重定向到 Cognito 的默认登录页面
- 用户登录并被重定向到主机/authenticate.html
- AJAX 调用被发送到 Cognito 的令牌端点,该端点返回用户的令牌。这些存储在
sessionStorage
- 用户被重定向到 Web 应用程序,现在已通过身份验证
我想在我的应用程序中有两个用户角色:Users和Admins。不应允许用户调用任何 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 应用程序的所有用户拥有管理员权限,因为 IAM 角色与身份池相关联,而不是与用户本身相关联。
有什么简单的方法可以实现这一目标吗?
如果有任何不清楚的地方,请随时提出问题,并提前感谢您的帮助。