【问题标题】:OAuth with Passport.js in a multi tenant application在多租户应用程序中使用 Passport.js 进行 OAuth
【发布时间】: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


【解决方案1】:

不是一个完整的答案,但有一种设计模式在移动到登录页面时将&redirect=/url-after-login 作为 URL 查询参数。成功登录后,登录处理程序将重定向回此 url。可以根据用户或原始页面选择 url。

这对你的情况有用吗?显然,这需要一些关于如何在 passport.js 中实现它的研究。抱歉,我不能提供工作代码。

【讨论】:

    猜你喜欢
    • 2021-05-22
    • 2019-01-10
    • 2015-08-01
    • 2023-02-09
    • 2022-11-11
    • 2020-08-15
    • 2018-08-29
    • 2011-05-05
    • 2015-08-17
    相关资源
    最近更新 更多