跳至内容

限制Amazon Cognito并发登录的最佳方法

0

【以下的问题经过翻译处理】 我有一个合作伙伴,已经实现了Amazon Cognito User Pools,并结合Amazon API Gateway和Lambda授权器来控制对公共面向无服务器应用程序的访问。他们经过了安全审计,并指出一个用户可以使用Cognito托管的UI通过相同的凭据从多个设备登录应用程序。从伙伴的安全策略角度来看,对于这个特定应用程序,希望在任何给定时刻只有一个会话是有效的。

我认为Amazon Cognito没有"内置"机制来强制执行最大并发会话数(换句话说,每次有效的身份验证尝试都会发出令牌,并在到期之前有效)。因此,如何实现这样的要求并尽可能少地增加基础架构是推荐的方法?

一种方法似乎是在客户端调用全局注销以"注销"所有现有会话,但这将依赖于客户端代码在登录时强制执行(安全团队对此不太舒适)。或者,这个逻辑也可以在Cognito Lambda Trigger代码(在身份验证后)中强制执行,以使它不依赖于客户端行为?

任何你见过客户和合作伙伴采用的满足这个要求的常见方法,都将有助于推进这个问题的讨论。

非常感谢。

专家
已提问 2 年前62 查看次数
1 回答
0

【以下的回答经过翻译处理】 嗨Alan - 基于令牌的身份验证模型(就像Cognito正在做的),旨在是无状态的,没有传统基于会话的身份验证中跟踪会话的概念,该身份验证会话使用cookie来跟踪。换句话说,如果没有存储此信息并进行自己的会话管理解决方案,则无法知道用户已经登录。此外,令牌是自包含的,即使在注销或吊销令牌后,它们仍然有效,直到过期(由于大多数服务将在不调用发行者的情况下验证令牌,令牌将仅通过检查签名和过期时间进行验证)。

简单地说,如果您想强制实现每个用户的单个会话,则需要回退到基于会话的身份验证并维护服务器端管理的会话。一种使用Cognito进行此操作的方法是存储一些信息,即用户具有活动会话(例如,在Cognito后身份验证触发器中存储一些映射,在DynamoDB中,用户XYZ具有将在时间ABC到期的活动会话,或者在缓存层中存储此信息与与令牌到期相匹配的到期期间,不要存储令牌本身或任何敏感数据)。然后,在Pre-Auth触发器中,您可以检查用户名是否具有活动会话,并拒绝身份验证尝试。然后,您需要考虑如何在用户注销或希望在活动会话到期之前切换到另一台设备时使此会话无效。

专家
已回答 2 年前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。