我正在使用React.js前端和Laravel API构建一个多租户应用程序。当用户登录时,我将tenant_id添加到他们的会话中。当从前端发出请求时,我计划使用一个中间件从用户的会话中获取tenant_id,并将其作为url参数附加到请求查询中。(例如api.com?tenant_id=xxx),然后调用next()
继续处理请求。
紧接着,我将从tenancy-for-laravel包中调用InitializeTenancyByRequestData
中间件,它将根据附加到前面中间件中的url的tenant_id将用户范围限定到正确的租户数据库模式。
将tenant_id存储在会话数据中安全吗?这种整体方法是否是使用SPA前端和API的多模式实现多租户的合理方法?
1条答案
按热度按时间v2g6jxz61#
只要使用加密和安全cookie标志适当保护会话,通常认为在会话数据中存储tenant_id是安全的。但是,始终存在会话劫持的风险,因此采取适当的措施(例如使用安全通信通道和定期轮换用于保护会话的加密密钥)非常重要。
至于您的方法,它似乎是合理的,并且通常用于具有SPA前端和API的多租户。通过将用户范围限定到正确的租户数据库架构,您可以确保每个租户只看到与他们相关的数据。您描述的中间件模式是将tenant_id附加到每个请求的好方法,使其易于在整个应用程序中访问和使用。但是,请记住,如果租户数据显著增长,这种方法可能会对性能产生影响,因为每个请求都必须切换到不同的模式。2考虑缓存或索引策略来缓解这一问题。