【发布时间】:2019-02-18 14:53:31
【问题描述】:
我正在开发一个允许多个租户使用子域的网站。
帐户可以添加自己的子域,只要它们不存在;例如:
http://tenant1domain1.mywebsite.com
http://tenant1domain2.mywebsite.com
http://tenant2domain1.mywebsite.com
http://tenant2domain2.mywebsite.com
我还添加了使用 passport.js 使用多个 oauth 提供商(google、microsoft、azure ad 等)登录的功能。
所有这些服务都会回调到主域(mywebsite.com/login/google/callback),我需要识别登录请求的子域来重定向用户。
由于单个用户可以拥有多个子域,因此我无法轻松地将其存储在他们的用户记录中。
目前我遇到了一个问题,我找不到将租户信息保留在护照身份验证阶段之后的方法。
我尝试使用会话变量,但会话在回调阶段被重置并且丢失了我存储在那里的所有信息。
我确实考虑过将子域添加为针对每个服务的允许回调 url,然后只是将回调设置到子域,但这很快变得无法管理。
有什么方法可以让passport.js保持现有会话变量不变或者使用其他方法来传输租户信息?
【问题讨论】:
-
您是否可以将租户名称作为 OAuth2 的 state 的一部分传递,以便提供者将其传回给您?
-
@WiktorZychla 策略中设置了状态?我可以通过这个函数来获取像
state: getCurrentTenant()这样的租户吗?
标签: node.js express oauth-2.0 passport.js