При использовании адаптера Node.js keycloak-connect для защиты ресурса браузер Microsoft Edge (v42 +, Windows 10) предотвращает успешную аутентификацию.
Это может быть последовательно реплицировано (но не ограничиваясь этим) следующие версии сервера Keycloak и обе соответствующие версии клиентского и серверного адаптеров:
Что происходит?
Перед перенаправлением пользователя со страницы аутентификации и после успешного входа-в обратном вызове успешного входа в систему создается дважды.Этот второй обратный вызов возвращает неверный запрос «400» перед началом перенаправления.
Для репликации:
- Откройте Microsoft Edge
- ОткройтеИнструменты разработчика> вкладка «Сеть» и убедитесь, что журналы не очищаются при навигации.
- Посетите любую страницу, защищенную Keycloak, без существующего / активного сеанса аутентификации с браузером Microsoft Edge.
- Введите свои учетные данные иlogin.
- Перед перенаправлением вы увидите ошибку.
Обычно это не вызывает серьезных проблем с библиотекой keycloak-js на стороне клиента.Но с любой ванильной или нестандартной реализацией адаптера узла мы стараемся, потому что аутентификация прошла успешно, и происходит перенаправление, веб-ресурсы загрузятся, но сразу же произойдет обратный вызов в третий раз, что даст 403.
Затем он оставляет пользователя в состоянии полу-аутентификации и означает, что сервер Node.JS не имеет доступа к объекту kauth.grant
, поэтому последующие защищенные запросы к API не имеют доступа к токену на стороне сервера.
Во время события сервер keycloak возвращает следующие журналы об этом событии:
WARN [org.keycloak.services.managers.CodeGenerateUtil] (default task-17) Code '1122279c-b648-4ee5-b39e-9ea7b661126d' already used for userSession 'd1188910-d3f4-4dbc-bf06-ad96c2c96002' and client '934cb774-b345-477c-944a-b6b694f131e0'.
WARN [org.keycloak.events] (default task-17) type=CODE_TO_TOKEN_ERROR, realmId=master, clientId=platform2, userId=null, ipAddress=172.18.0.1, error=invalid_code, grant_type=authorization_code, code_id=d1188910-d3f4-4dbc-bf06-ad96c2c96002, client_auth_method=client-secret
Я поднимаю это здесь в StackOverflow в соответствии с рекомендациями разработчика JBoss, поскольку технически это проблема Microsoft Edge.
Это невероятно важно, хотя, как я полагаю, гораздо больше людей, должно быть, сталкивается с чем-то связанным, и, к сожалению, Edge имеет большую долю рынка браузеров.
Любой совет будет принят с благодарностью!