我现在正在构建一个由2个子域和主站点组成的平台,例如:
example.com
sub1.example.com
sub2.example.com
这三个应用程序在一个单独的端口上独立运行,并通过nginx路由。
假设sub1.example.com
控制着身份验证等。这是登录发生的地方,并设置会话变量并生成JWT。会话数据是否会从一个应用程序传输到另一个应用程序? sub2.example.com
能够验证会话数据吗?
我该如何解决这个问题?
注意:这些应用程序最初位于一个应用程序中,但现在正在分离。会话目前使用Redis存储。
答案 0 :(得分:1)
如果每个服务器都是不同的服务器,运行一个单独的node.js进程,那么你需要某种方式来传递它们之间的会话(或某种标识符)。
一种方法是在请求中使用会话标头,告诉其他服务器您已经登录。
答案 1 :(得分:0)
如果您没有将会话数据明确地存储在集中式数据库或所有子域都可以访问的存储机制中,则会话数据不会被转移到另一个子域。
由于您使用的是JWT,因此如果它们在不同的服务器/进程上运行,则需要在每个子域上进行身份验证。您只需要保持相同的密钥。
为了维护会话数据,简单的步骤是 - 如果用户请求来自任何子域:
使用API密钥和JWT验证请求,如果是第一次在Redis中存储令牌
将您的会话数据与该令牌存储在持久数据库中
现在,当另一个请求来自具有JWT令牌的同一用户时,如果针对该令牌ID存在会话数据并使用它们,则进行身份验证并查看您的数据库。
希望这有帮助。