База знаний Business Studio 7
Переход на сайт нейросети Perplexity AI для поиска информации о Business Studio. Подробнее о возможности см. по ссылке

Содержание справки



Бесконечная загрузка веб-страницы Business Studio и ошибка при входе в KeyCloak

Вопрос:

При попытке входа в веб-интерфейс идет бесконечная загрузка веб-страницы Business Studio. Во вкладке Network браузера (чтобы открыть вкладку Network, нужно на странице веб-интерфейса нажать кнопку F12 и в открывшейся панели DevTools перейти во вкладку Network) циклические ответы со статусом 302.

А также, возникают ошибки при авторизации Keycloak: «We are sorry», либо «somethingWentWrong».

Также проблема может проявляться следующим образом:

  • не открывается страница авторизации, вкладка долго показывает «OIDC Form_Post Response» и не загружается;
  • после входа страница возвращается на вход или на пустую главную, вход повторяется по кругу;
  • появляется сообщение Message contains error: 'invalid_grant', error_description: 'Code not valid';
  • запрос signin-oidc во вкладке Network выполняется очень долго или завершается ошибкой 504, 502 или 500;
  • проблема исчезает после очистки cookie.

Какие могут быть причины проблемы и как ее решить?

Ответ:

Возможные причины и способы их устранения:

  • Некорректно указан домен Keycloak

    Проверьте заданное значение для параметра KEYCLOAK_DOMAIN в файле .env (подробнее см. Настройка файла .env)
  • Не заполнены обязательные параметры в файле .env

    Проверьте, все ли необходимые параметры в файле .env заполнены (не должно быть значений ***), подробнее см. Настройка файла .env.
  • Неправильно настроен OpenID клиент в Keycloak

    Проверьте настройки OpenID клиента в Keycloak в соответствии с инструкцией Настройки OpenID клиента.

Внимание! Вкладка OpenID в файле .env настраивается только после того, как вы попадете в веб-интерфейс Keycloak и последовательно дойдете до этого пункта в инструкции по настройке Keycloak (подробнее см. Настройка Keycloak).

  • Проблемы с проксированием (nginx)

    Чтобы проверить прокси заголовка nginx, нужно использовать команду:
    curl -vk http://<keycloak-domain>

    Если она выводит сертификат, который отдает сервер и его заголовки, то прокси заголовка nginx работает корректно.

    Пример корректного вывода команды:

* Trying <ip:port>...
* Connected to <domain> (<ip>) <port> (#0)
* ALPN: offers h2,http/1.1
...
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 ...
* ALPN: server accepted http/1.1
...
< HTTP/1.1 302 Found
< Server: nginx...
< Date: ...
< Content-Length: 0
< Connection: keep-alive
< Location: ...
< Referrer-Policy: no-referrer
< Strict-Transport-Security: max-age=31536000; includeSubDomains
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Access-Control-Allow-Origin: *
  • Ошибка в настройке CSP (редиректов)

    Проверьте настройки CSP для Keycloak в соответствии с инструкцией Настройка CSP для Keycloak.

    Признак ошибки CSP в консоли браузера (вкладка Console): Framing 'https://<keycloak-domain>/' violates the following Content Security Policy directive: "frame-ancestors 'self'".
  • Не завершается запрос signin-oidc

    Вероятна, если вход уже работал ранее, а в Network запрос signin-oidc выполняется очень долго или завершается ошибкой 504/502/500. Порядок диагностики описан ниже, в разделе «Диагностика зависания запроса signin-oidc».
  • Устаревшее состояние сессии (после долгого простоя)

    Вероятна, если ошибка возникает при возврате на вкладку после долгого бездействия и пропадает после очистки cookie. Подробнее описано ниже, в разделе «Ошибка после долгого простоя».

Диагностика зависания запроса signin-oidc

После входа Keycloak передаёт приложению одноразовый код авторизации на адрес /signin-oidc, и backend должен обменять его на токен, обратившись к Keycloak. Если этот шаг не завершается, страница «крутится», через 60 секунд nginx может вернуть 504, а повторная отправка формы даёт ошибку invalid_grant: Code not valid (код одноразовый и живёт около минуты).

Шаг 1. Проверьте состояние контейнеров (nginx, bs-backend, keycloak):

docker ps -a

Если у какого-то контейнера статус «Restarting» или «Exited», изучите его логи (см. также статью Ошибка «502 Bad Gateway» или «504 Gateway Timeout»).

Шаг 2. Изучите логи nginx и bs-backend за момент ошибки:

sudo docker logs --since 10m <имя контейнера nginx>
sudo docker logs --since 10m bs-backend

Признак зависания в логах nginx: upstream timed out (110: Connection timed out). В логах bs-backend ищите ошибки обращения к Keycloak и к базе данных.

Шаг 3. Проверьте доступность Keycloak из контейнера backend:

sudo docker exec -it bs-backend curl -kv https://<keycloak-domain>/realms/<realm>/.well-known/openid-configuration

Команда должна быстро вернуть JSON с настройками. Если запрос зависает или возникает ошибка DNS или сертификата, устраните проблему сети, DNS или сертификата. Если в образе нет curl, выполните проверку с хоста.

Шаг 4. Проверьте события в Keycloak: Events → Login events, типы CODE_TO_TOKEN и CODE_TO_TOKEN_ERROR.

Шаг 5. Проверьте ресурсы сервера:

docker stats --no-stream
free -h
df -h

Ошибка после долгого простоя

Если ошибка возникает при возврате на вкладку после долгого бездействия и пропадает после очистки cookie, причина в устаревшем состоянии сессии: истекли сессия приложения и сессия Keycloak, и вход запускается заново.

Косвенный признак: в cookie сайта накопилось много записей .AspNetCore.Correlation.* и .AspNetCore.OpenIdConnect.Nonce.* (F12 → Application → Cookies).

Временное решение: удалите cookie сайта Business Studio и откройте страницу заново. Очистка cookie устраняет симптом, но не причину. Если ошибка повторяется регулярно, выполните проверки из раздела «Диагностика зависания запроса signin-oidc».

Если проблему устранить не удалось

Обратитесь в техническую поддержку и приложите:

  • логи nginx и bs-backend за момент ошибки;
  • события Keycloak (CODE_TO_TOKEN, CODE_TO_TOKEN_ERROR);
  • скриншот вкладки Network с запросом signin-oidc (статус, время выполнения);
  • скриншот консоли браузера (вкладка Console).