Я использовал Spring Session и OAuth2 для создания единого входа для мультитенантного приложения, и у меня было Приложение с различными внешними клиентами и внутренним сервером.
(Я использовал этот урок https://www.baeldung.com/sso-spring-security-oauth2).
Таким образом, проблема теперь состоит в том, что каждый клиент (Арендатор) работает в другом домене, чем внутренний сервер, и поэтому внутренний сервер имеет только один файл cookie, и пользователь не может войти в систему с двумя различными клиентами одновременно. (У каждого арендатора есть разные токены на предъявителя, поэтому проблема заключается только в cookie)
Идея заключалась в том, чтобы каким-то образом настроить Spring для создания другого файла cookie SESSION на сервере (что мне не удалось сделать / не знаю, возможно ли это вообще)
Кроме того, я не понимаю, зачем мне нужен этот cookie, поскольку я использую аутентификацию на основе токенов.
Я понимаю, что если я хочу автоматически войти в систему, если пользователь закроет браузер и снова откроет его, мне нужно сохранить некоторые данные на стороне клиента (например, файл cookie, но зачем использовать для этого JSESSIONID, а не сохранить токен на предъявителя в куки)
Кроме того, я верю, что после авторизации для авторизации используется сессионный cookie, а не токен oAuth. (Я удалил его из хранилища токенов + обновить токен и при следующем запросе он просто создал новый)
Итак, в основном я хочу знать:
- Могу ли я как-то настроить свой бэкэнд для создания одного cookie на каждого арендатора? (без запуска нескольких экземпляров)
- Зачем мне сеансовый cookie?
- Как пользователь повторно аутентифицируется в oAuth после того, как я удалю токены из хранилища токенов, без необходимости повторного ввода пароля (я полагаю, за это отвечает файл cookie сеанса)
Мой конфиг 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