【问题标题】:How can I integrate AWS-Congnito-Userpool-Group Logic into my React App?如何将 AWS-Cognito-User Pool-Group Logic 集成到我的 React 应用程序中?
【发布时间】:2022-01-06 07:18:51
【问题描述】:

我正在开发一个 React 项目,我想在其中使用 AWS Cognito 进行基于角色的身份验证。我的项目将拥有多个角色,例如超级用户、用户、管理员、超级管理员等,为此我创建了多个用户池。就像每个角色有 1 个用户池一样,一切都正常工作,但结果证明我可以通过在其中创建组来在单个用户池中实现相同的功能。

所以,问题是现在我正在使用“aws-cognito-identity-js”库来验证用户身份。但是在那个库中我找不到任何与 Userpool Groups 相关的代码,并且我试图找到另一个与 Userpool Groups 相关的库,但我找不到任何代码。那么,如何将 Groups Logic 集成到我的 React 应用程序中?!

【问题讨论】:

    标签: amazon-web-services amazon-cognito role-based-access-control


    【解决方案1】:

    当您登录到用户池时,您会获得一个 ID-Token。此 ID 令牌的有效负载还包含用户所属的组。

    let 
      [header, payload, signature] = idtoken.split("."),
      jsonPayload = JSON.parse(atob(payload)),
      groups = jsonPayload["cognito:groups"]
    

    当然,您也可以使用您最喜欢的 JWT 库(甚至amazon-cognito-identity-js 包含一些内容)来验证和解析 ID 令牌并从中提取所需的声明。

    编辑

    amazon-cogito-identity-js 在用户自行注册期间不能用于管理群组。恕我直言,用户可以在没有管理干预的情况下将自己添加到组(这可能对您的应用程序有一定的安全影响),这将是违反直觉和安全漏洞的。

    如果你真的想让新创建的用户选择他所属的组,你可以通过用户池上的Post Confirmation Trigger 来做到这一点。

    1. 在注册用户时添加所需的组名作为自定义属性。

    2. 一旦用户得到确认,就会执行确认后触发器(一个 lambda 函数)。此 lambda 函数必须具有执行AdminAddUserToGroup 命令所需的权限。

    3. 在触发器(接收用户属性作为参数)内执行上述AdminAddUserToGroup 命令。

    【讨论】:

    • 好的!很公平,但你是说当我登录用户时我会得到 ID 令牌,那么当我想在某个组中注册新用户时呢?
    • 自我注册期间?用户可以将自己注册到“超级用户”组是相当违反直觉的,你不觉得吗?如果您从管理员帐户创建/修改用户,您可以随时使用AWS SDK
    • 不,我的意思是如果某个用户想要注册并且该用户打算注册为“用户”角色然后在我的 React App 上,该用户将提供用于注册的电子邮件和密码以及他/她需要在我的 react 应用程序上选择角色,然后我的应用程序将使用该“aws-cognito-identity-js”库并请求 cognito 使用所选组注册新用户。那么,我该怎么做呢?!
    猜你喜欢
    • 2021-03-01
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 2021-10-07
    • 2017-10-09
    • 2021-02-19
    相关资源
    最近更新 更多