删除认知用户和身份对用户访问没有影响

Deleting cognito user & identity has no affect on user access

我正在尝试将 AWS Cognito 用户池与 Cognito 联合用作我在 api-gateway 上的 API 的身份验证。我让身份验证和授权部分(使用角色)工作,但现在仍然停留在如何撤销访问权限上。登录并获得联合身份后,我从身份浏览器(控制台)中删除了身份,并从 Cognito 用户池中删除了用户。但这不会使使用较早生成的令牌的访问无效,直到它们过期(至少 1 小时)。

我也尝试将 ServerSideTokenCheck 设置为 true,但这也不起作用。 "revoke" 访问的唯一方法似乎是 this。但这对我们不起作用,因为我们的用例将角色分配给一个组。我不能让一组用户失去对一个用户的 revoke/deny 访问权限。

完成这件事我有什么遗漏吗?我无法理解无法让我轻松撤销用户访问权限的身份验证服务。

这是使用 Cognito 颁发的用于身份验证的无状态 JWT 令牌的常见情况。

一旦用户获得了有效期为1小时的令牌,令牌本身就作为身份验证的证明。该令牌由 AWS 签名和颁发,为了进行验证,它只需要使用公钥进行签名验证。

您可以在应用程序的授权层处理此问题,您可以在用户成功通过身份验证后检查该用户是否在数据库中 active/deactive。您可以进一步从 Cognito 中删除该用户,他将无法再次登录。

我明白你在说什么,正如另一个答案在颁发令牌时所解释的那样,用户可以在令牌到期之前使用令牌。可以通过两种方式解决您的问题:

Cognito 方式:为此,您对 Cognito 进行两次调用,第一次是在用户已启用的情况下,第二次是在已启用的情况下验证其令牌。

数据库方式:你有一个数据库,作为"black list"持有者,所以当你想禁用用户时,应用程序添加用户名用户到数据库。因此,当用户想要进行身份验证时,您首先检查数据库(如果启用了用户),然后检查其 cookie 是否为 authentication/authorization。

注意:如果您的用户群很小,您可以采用 Cognito 方式,但是如果您的用户群很大,Cognito 调用会有限制;你应该考虑第二种方法。