具有用户-租户灵活性的多租户系统中 JWT 管理的最佳实践?

Best Practices for JWT Management in a Multi-Tenant System with User-Tenant Flexibility?

提问人:msickpaler 提问时间:9/25/2023 最后编辑:msickpaler 更新时间:9/25/2023 访问量:47

问:

我正在开发一个多租户系统,我正在利用 JWT 进行用户身份验证和授权。为此,我们向所有表添加了一个tenant_id列。 喜欢这个

CREATE POLICY tenant_isolation_policy ON tenant_business
USING (tenant_id = current_setting('app.current_tenant')::UUID);

我的担忧如下:

如果用户从租户中删除(尤其是由租户的管理员删除),他们可能会继续在该租户下执行操作,直到 JWT 过期。如何降低此风险并确保被逐出的用户立即失去访问权限?

我很困惑我是否过度担心,因为许多关于多租户系统中 RLS 的评论对此没有意见。如果这是一个过度的担忧,我想知道为什么它过度。

我期待着社区对这些挑战的见解。您的经验和建议将对我非常有益!

数据库 PostgreSQL JWT 行级安全性

评论

0赞 Ermiya Eskandary 9/25/2023
你一个问题太多了,请让问题更有针对性。
0赞 msickpaler 9/25/2023
谢谢@ErmiyaEskandary!我已将其缩小到一个问题以及由此产生的问题。
0赞 Ermiya Eskandary 9/25/2023
谢谢!你的担忧并不过分。您能分享一下您的 JWT 是什么格式(参考与独立)以及您如何跟踪它们吗?您的应用程序是生产者,还是使用外部身份提供商(如 Okta 或 Microsoft AD)?您真的需要立即撤销,还是在 5 分钟这样的时间范围内撤销是否可行?
0赞 msickpaler 9/26/2023
我正在使用 next-auth 进行 jwt 身份验证。因此,我的应用程序是生产者,而 jwt 是一种独立的格式。过期时间为 1 个月(可以 1 秒为增量进行编辑),每次启动会话时,都会使用新的 1 个月重建会话。即使在 5 分钟后,这通常也不是问题,因为数据是基本的浏览。我只是觉得这是一个数据实际可更新的问题,所以我觉得立即过期是安全且可取的(这是我说过我过度担心的部分)。
0赞 Ermiya Eskandary 9/27/2023
在注销时撤消令牌,并为已撤销的令牌保留 1 个月的 Redis 或内存缓存,以确保它们在仍可用作活动状态的当月内未被使用。

答: 暂无答案