首页 > 解决方案 > 使用 Spring Boot 在单个浏览器会话中使用多个 OAuth2 客户端

问题描述

我们有使用 Spring Boot + Spring Security 设计的多租户 WebApp。此应用用于管理 Azure 中的某些资源。用户使用 OAuth2.0 登录我们的 WebApp,并可以通过我们的应用访问 Azure 资源。

现在我们需要允许多个用户在单个浏览器会话中登录我们的应用程序。所以基本上用户(用户 1)将使用凭据 1 登录以访问这些凭据允许的资源。然后用户将使用凭据2(基本上是另一个用户凭据,我们称之为 user2)登录到相同的浏览器页面。同一会话中将有两个活动用户。用户应该能够在这些帐户之间切换。

一旦用户登录到我们的应用程序,我们就会实例化 RestTemplate(使用输入的凭据)以访问 Azure 资源。

我们可以将单个 JSession id 映射到多个 RestTemplate,或者将多个 JSession ID(在单个 JSession cookie 中)映射到单个 RestTemplate。我们可以有请求参数来指示使用哪个 RestTemplate。

我们使用 SpringSecurity 来获取访问令牌。然后在 RestTemplate 中使用此访问令牌并用于访问 Azure 资源。

标签: springspring-bootspring-securityspring-security-oauth2spring-session

解决方案


“现在我们需要允许多个用户在单个浏览器会话中登录我们的应用程序”

这种方法是否安全?我的意思是,不建议让两个用户使用相同的浏览器并共享信息。

“我们可以将单个 JSession id 映射到多个 RestTemplate 或将多个 JSession ID(在单个 JSession cookie 内)映射到单个 RestTemplate”

我从未见过这种方法。以谷歌为例——你可以切换个人资料,但需要登录。

如果你真的需要这样做,Chrome、Firefox 和 Opera 有一个开箱即用的解决方案,称为SessionBox,它可以在同一个浏览器中进行会话切换。否则,两种常见的解决方案是:

  • 使用两种不同的浏览器(例如 Chrome 和 Firefox)
  • 使用隐身模式

推荐阅读