首页 文章

使用自定义属性通过API网关向Cognda验证Cognito用户是否安全?

提问于
浏览
0

我目前正在使用Cognito用户池作为API网关 endpoints 的授权者,直到Lambda函数 .

我可以将集成请求传递给Lambda,并根据自定义属性安全地允许或拒绝Lambda内部吗?

映射:“administrator”:“$ context.authorizer.claims ['custom:administrator']”,

Lambda处理程序:

boolean isAdmin =   Boolean.parseBoolean(request.getContext().get("administrator"));

if(isAdmin) etc...

要明确的是,非管理员的用户不应该访问与管理员相同的API endpoints .

在此之前/之后我还需要做任何其他事吗?

我通过包含Authorization:JWToken标头,在用户登录Cognito后使用Javascript将初始请求发送到API网关 .

我是否需要验证Lambda函数中令牌的签名?我认为API Gateway已经做到了 .

有没有更好的方法来管理这个安全性?

理想情况下,我希望能够根据用户池中的GROUPS限制对API endpoints 的访问,但我不认为这是可能的 .

Groups文档讨论了通过AWS Identity and Access Management限制访问/权限 . 如果我走这条路,我该如何向API网关发出请求?我是否仍然使用JWToken Authorization标头,并使用Cognito作为API网关中的授权者?

1 回答

  • 0

    Cognito用户池中包含的自定义属性/声明支持是安全的,如果使用正确,可以用于此类用例 . 有几点需要注意 .

    首先,确保用户不希望将该属性设置为用户可以访问的应用程序的可读属性 . 有关自定义属性can be found here的详细信息 .

    另一个警告是确保您的请求主体永远不会绕过您的映射模板,这可能允许攻击者直接设置传递给您的Lambda函数的管理员属性 . 为此,请编辑集成请求并将“请求正文直通”设置为“从不” .

    您可以使用其他替代方案来处理此用例 . 最干净的方法是为您的管理员提供完全独立的API . 然后,您可以为管理员使用单独的Cognito用户池,也可以使用IAM用户或组 .

相关问题