我有 2 台服务器:
1) 端口 8443 上的 Apache tomcat 服务器使用 Spring 引导
2) 端口 443 上的节点服务器
它们都是HTTPS。
现在,应用程序的设计方式是服务器 1 处理登录页面,服务器 2 处理仪表板
因此,用户使用 : https//localhost:8443/login 登录
成功登录后,我做了一个
window.open(https//localhost:443/dashboard?userName=xyz,"_self");
将用户重定向到节点服务器托管的仪表板。
现在我的问题是,如果用户直接点击https//localhost:443/dashboard?userName=xyz,那么他可以访问错误的仪表板。
用户应始终仅在登录后访问仪表板。
但是我不能使用会话,因为会话无法在 2 台服务器之间共享。
那么,如果用户已登录服务器 1 并且允许他查看服务器 2 中的仪表板,我如何跟踪呢?
我也打算买一个域名但是如何通过 2 个端口托管它?( 8443 & 443)
我想要类似的东西
1) https//example.com/login ( 端口 8443)
2) https//example.com/dashboard?userName=xyz ( 端口 443 )
对于有关跟踪用户的问题,您可以执行以下操作(自定义解决方案,您也可以使用现有产品来实现)。第 2 a 点和 b 点是同时进行的。
- 成功登录后,在第一台服务器上生成令牌
2.a. 将令牌作为参数发送到重定向
2.b. 将令牌从第一个服务器发送到第二个服务器(可能通过 HTTP)并将其关联到用户
- 使用来自重定向的内容检查与用户关联的令牌。如果这些不匹配,则引发错误
至于域,您可以设置反向代理,例如Apache,并将不同的路径重定向到不同的服务器。示例:/login 将转到一个端口,其余端口将转到另一个端口
我会建议采用与Alexandru给出的方法类似的方法,但有一个转折 - 登录应该生成JWT并在那里编码所有相关的身份验证信息,以便您的节点.js服务器可以验证它并用于相应地授权用户。
至于你问题的第二部分,Apache或nginx应该就足够了,就像Alexandru建议的那样。