首页 > 解决方案 > 从 Cognito 用户池中的组中删除用户在他们注销并重新登录后才会生效

问题描述

我们有一个连接到 AppSync API 的 Cognito 用户池。在 graphql.schema 中,我们限制哪些用户可以访问哪些端点,如下所示:

type Mutation {
    createProject(projectInput: CreateProjectInput!): Project!
        @aws_auth(cognito_groups: ["StandardUsers"])
}

AppSync 端点触发 Lambda,它获取 Cognito 用户的详细信息,用于像这样进行身份验证:

const cognitoIdentity: AppSyncIdentityCognito = event.identity as AppSyncIdentityCognito

const user: User = {
    id: cognitoIdentity.sub,
    username: cognitoIdentity.username,
    groups: cognitoIdentity.groups
}

我们正在使用 Amplify JS 库进行身份验证。

当属于 Cognito 组时,用户可以愉快地点击端点,但如果我删除它们(通过 AWS 控制台),他们可以继续点击端点!!

如果他们注销并重新登录,他们将被拒绝访问端点。

怎样才能有一个立即的“终止开关”来确保用户不再拥有这些权限?

标签: aws-lambdaamazon-cognitoaws-appsync

解决方案


Cognito 在设计上是一种无状态身份验证方法。一旦用户登录,他们就会获得该特定会话的令牌。因此,在这些令牌到期之前,他们将获得这些令牌中定义的所有权限。这些令牌一旦发布就无法手动过期,但您可以使用自己的实现将它们列入黑名单。

您的要求是状态身份验证。您将需要使用检查“列入黑名单”令牌的数据库和自定义授权器自己实现这一点。


推荐阅读