aws-lambda - 从 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 控制台),他们可以继续点击端点!!
如果他们注销并重新登录,他们将被拒绝访问端点。
怎样才能有一个立即的“终止开关”来确保用户不再拥有这些权限?
解决方案
Cognito 在设计上是一种无状态身份验证方法。一旦用户登录,他们就会获得该特定会话的令牌。因此,在这些令牌到期之前,他们将获得这些令牌中定义的所有权限。这些令牌一旦发布就无法手动过期,但您可以使用自己的实现将它们列入黑名单。
您的要求是状态身份验证。您将需要使用检查“列入黑名单”令牌的数据库和自定义授权器自己实现这一点。
推荐阅读
- machine-learning - 当奖励非常低时,多臂老虎机是一种选择吗
- php - 从 Woocommerce 中的相关产品显示中排除产品
- angularjs - 在路径 AngularJS 上托管 JSON
- javascript - redux 存储的最大内存大小是多少?
- jquery - 取消绑定更改事件
- javascript - 错误:this.state.joblistings.map 不是 ReactJS 中的函数
- asp.net - 是否可以将 System.IO.Stream 作为 Swagger 的输入参数?
- javascript - 打字稿错误此条件将始终返回“真”,因为类型没有重叠
- css - 是否可以在css中舍入值?或者,如何解决 % 已翻译布局上的半像素/子像素?
- java - Kafka 流:从应用程序的每个实例中的所有分区读取