我有一个包含多个租户的ASP.NET Core MVC站点。租户ID在登录的GET请求上的查询字符串中传入并保持在会话中。显示导航上的租户名称和其他一些特定于租户的自定义。
如果用户注销,我可以从会话中获取租户ID,将其放回查询字符串,然后重定向到登录页面,以便用户能够重新登录。
我的问题是,当会话超时时,MVC将重定向到我的登录页面以开始新的会话,但我无法将租户ID添加到我需要的查询字符串以显示正确的租户信息。
如何在不使用会话的情况下在多租户环境中保留租户ID?
最好通过每个客户端查询传递租户。
作为一种选择,您可以在登录时将选定的租户保存在单独的cookie中,这样您就可以在此cookie存在时知道租户。
此外,请记住,许多网站/应用程序允许用户随时更改语言/租户,而不仅仅是在登录时。
不要使用会话。将租户ID作为声明添加到经过身份验证的用户。您可以将其作为登录表单中的字段添加,而不是将租户ID附加到URL以进行初始设置。据推测,无论如何,身份验证应该与租赁相关联,所以无论如何这应该更理想。换句话说,用户选择他们的租户,然后输入他们的用户名/密码进行登录。然后,您还可以执行检查,例如在登录期间是否实际允许用户访问该租户,以及设置租户ID声明。