Спасибо за ваш ответ. Я сделал частично, как вы пишете. Зарегистрированный пользователь распознается по имени пользователя или идентификатору пользователя, полученному из маркера носителя. Однако для незарегистрированных пользователей я сделал серверную службу отдыха, которая возвращает acces_token и устанавливает для себя httpOnly cook ie со значением reresh_token. Когда angular запрашивает сеанс незарегистрированного пользователя, служба отвечает токеном, основанным на refesh_token от повара ie, или создает новый сеанс и устанавливает повара ie с refresh_token. На мой взгляд, это решение имеет ряд преимуществ:
- Я легко могу контролировать доступ анонимных пользователей к приложению (проверить количество, заблокировать доступ)
- прямого доступа нет в мой API (каждый должен получить токен из бэкэнд-сервиса раньше)
- повар ie защищен, так что я не могу прочитать его из javascript из внешнего интерфейса
- является согласованным решением для пользователей, вошедших в систему и не зарегистрировавшихся - я всегда использую маркер keycloak для распознавания пользователей - в случае зарегистрированных пользователей это userName, а в случае незарегистрированных - session_state.
Недостатки, которые я обнаружил, это то, что я не знаю, как keycloak справляется с тем фактом, что многие пользователи одновременно входят в систему для одного и того же пользователя - я буду выполнять тесты загрузки, но из того, что я прочитал, это не должно быть проблемой. .