Я работаю над SPA, который использует keycloak.js для взаимодействия с моим сервером Keycloak.Я инициализирую объект Keycloak с onload = 'check-sso' и включенным checkLoginIFrame.
Если я выполняю следующие шаги:
- Загрузка моего сайта
- Нажмите мойКнопка «Войти» (вызов Keycloak.login ())
- перенаправить на страницу входа в Keycloak, войти, перенаправить обратно в мое приложение
- Перезагрузить мой сайт
Я заметил, что при перезагрузке сайта происходит быстрое перенаправление (URL-адрес кратко меняется с mysite.com на mysite.com/#state=… .. затем обратно на mysite.com).Я хотел бы избежать перенаправления, когда я уже вошел в систему.
Отладив код, я выяснил, почему это происходит:
- login-status-iframe.html page - это просто оболочка для некоторого статического JS для управления файлом cookie, в котором хранятся токены аутентификации.
- Вызывается его основной метод
checkState(...)
(через сообщение из keycloak.js)во время инициализации… без токена (sessionState
пусто, так как keycloak.js не знает о куки). - Код входа в систему iFrame считывает куки и создает XHR-запрос к mykeycloak.com / .../login-status-iframe.html/init? ... (с файлом cookie в заголовках запроса).
- Когда он получает ответ 204 (что я имею в виду: файл cookie действителен, все в порядке), он сравнивает токен (из cookie) с тем, что он был получен из keycloak.js (т.е. ничего).
- Так как они не равны, он отвечает на обратный вызов «изменено».
- Это интерпретируется в keycloak.js, что означает, чтотокен изменился?) и поэтому он вызывает
doLogin(false)
, где он меняет URL, создавая нежелательное перенаправление.
Итак, мои вопросы таковы:
- Где документация по API для вызова login-status-iframe.html / init ?
- Можно ли сделать что-то вроде:
- Иметь логин-status-iframe возвращает токен, когда сервер KC сообщает ему, что токен все еще действителен (например, «обновить XXXXX» вместо «изменен»)
- keycloak.js затем примет это и обновит свой токен,без необходимости звонить
doLogin()