我使用Spring Session和OAuth2为多租户应用程序构建SSO,并拥有一个具有不同前端客户端和后端服务器的应用程序。
(我使用了本教程https://www.baeldung.com/sso-spring-security-oauth2)。
因此,现在的问题是,每个客户端(租户)都与后端服务器在不同的域上运行,因此后端服务器只有一个cookie,并且用户无法同时登录两个不同的租户。 (每个租户都有不同的承载令牌,因此只有cookie是问题)
这个想法原本是要以某种方式配置spring以便在服务器上也创建一个不同的SESSION cookie(我没有设法这样做/甚至不知道这样做是否可行)
另外,由于我使用的是基于令牌的身份验证,因此我不明白为什么需要该Cookie。
我确实了解,如果我要在用户关闭浏览器并再次打开浏览器时自动登录,那我需要在客户端保存一些数据(例如Cookie),但是为什么要使用JSESSIONID而不选择将不记名令牌保存在cookie中)
另外,我确实相信在登录过程之后,会话cookie用于授权,而不是oAuth令牌。 (我从令牌存储+刷新令牌中删除了它,并在下一个请求中仅创建了一个新令牌)
所以基本上我想知道的是:
我的Yaml配置看起来像这样:
server:
port: 8082
servlet:
context-path: /ui
session:
cookie:
name: UISESSION
security:
basic:
enabled: false
oauth2:
client:
clientId: SampleClientId
clientSecret: secret
accessTokenUri: http://localhost:8081/auth/oauth/token
userAuthorizationUri: http://localhost:8081/auth/oauth/authorize
resource:
userInfoUri: http://localhost:8081/auth/user/me
client2:
clientId: SampleClientId
clientSecret: secret
accessTokenUri: http://localhost:8081/auth/oauth/token
userAuthorizationUri: http://localhost:8081/auth/oauth/authorize
resource:
userInfoUri: http://localhost:8081/auth/user/me