我正在尝试将具有Cognito联合身份验证的AWS Cognito用户池用作api-gateway上我的API的身份验证。我可以使用身份验证和授权部分(使用角色)来工作,但是现在却沉迷于如何撤消访问权限。登录并获取联合身份后,我从身份浏览器(控制台)中删除了该身份,并从cognito用户池中删除了该用户。但这不会使使用较早生成的令牌的访问无效,直到它们过期(至少1小时)。
我还尝试将 ServerSideTokenCheck 设置为true,但这也不起作用。唯一撤销访问的方法似乎是this。但这对我们不起作用,因为我们的用例将角色分配给组。我不能让用户组失去对一个用户的撤消/拒绝访问的权限。
有什么我想念的吗?我无法理解身份验证服务,该服务不能给我简便的方法来撤消对用户的访问。
答案 0 :(得分:1)
这是由Cognito发行的用于身份验证的无状态JWT令牌的常见情况。
一旦用户持有有效期为1个小时的令牌,令牌本身就可以作为身份验证的证明。令牌由AWS签名和发行,并且仅需使用公钥进行签名验证即可进行验证。
您可以在应用程序的授权层中处理此问题的方法,您可以在用户成功进行身份验证之后检查用户在数据库中处于活动状态还是非活动状态。您可以进一步从Cognito删除该用户,使其无法再次登录。
答案 1 :(得分:1)
我明白了您在说什么,作为发行令牌时另一个答案的解释,用户可以使用令牌直到令牌到期。解决问题的方法有两种:
Cognito方式:为此,您需要两次调用Cognito,首先是启用了用户,然后是第二次,以验证其令牌。
数据库方式:您有一个数据库,它充当“黑名单”持有人,因此,当您要对用户进行贬低时,应用程序会将用户的用户名添加到数据库中。因此,当用户要进行身份验证时,您首先要与数据库进行检查(如果已启用用户),然后检查其cookie以进行身份验证/授权。
注意:如果您的用户群较小,则可以采用Cognito方式,但是,如果您的用户群较大,则Cognito通话受到限制。您应该考虑第二种方法。