Cognito 授权人组

Posted

技术标签:

【中文标题】Cognito 授权人组【英文标题】:Cognito Authorizer groups 【发布时间】:2021-07-07 21:02:52 【问题描述】:

我有一个 Angular 中的单页应用程序,一个带有 Lambda 的 API 网关用于后端服务和 Cognito 用户池用于身份验证和授权。

对某些 API 端点的访问取决于用户角色。您可以使用(为 Api 网关资源执行 API 调用)策略将 IAM 角色附加到组。

但是,使用 Cognito 作为 API 网关的授权方仅在调用API。用户所在的群组,不会用于检查其所属群组及拥有的IAM权限。

有没有一种好方法来授权我的网络用户,根据他们的角色调用某些 API 端点,而不是创建 Lambda(自定义)授权者。

我不想将 AWS 签名 V4 用于具有 IAM 授权方的 API 网关。 我也不想创建验证 ID 令牌、检查附加到它的角色并返回基于该角色的策略的 Lambda 授权器。

我不能只使用我为 Cognito 组配置的角色,结合 Cognito Authorizer 来根据该组的附加角色/策略访问 API 端点吗?

或者还有其他用户友好的方式吗?

【问题讨论】:

【参考方案1】:

你是对的,cognito 只会验证令牌,而不是 IAM/Group 权限。因此,如果令牌有效,则客户端可以访问 api。 我也在为此苦苦挣扎,然后最终编写了一个自定义 lambda 授权器。

这是我所做的。

    在数据库中维护组到资源的映射。此外 资源到操作(GET/POST 等)。 cognito 中的组名必须与数据库中的组名匹配。 在 lambda 授权器中,您可以检查传入的资源、组和操作组合是否存在于数据库中,并返回允许访问资源的策略。 您还需要验证令牌签名和有效期。

【讨论】:

以上是关于Cognito 授权人组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 API 网关中通过混合 Cognito 身份和用户池来授权 API

使用 Lambda 授权方的 AWS Cognito 和 API 网关

如何在 API 网关上的 cognito 授权方保护的 lambda 函数中获取 AWS Cognito 用户数据

从 Cognito 组担任 IAM 角色

使用 cognito 进行 Appsync graphql 授权

Api 网关阶段的不同 Cognito 池授权者