Keycloak: диалоговое окно «Учетная запись уже существует» периодически отображается, когда я пытаюсь войти в первый раз - PullRequest
0 голосов
/ 07 мая 2019

Я вижу странный сценарий в Keycloak:

  • Настройка Keycloak в качестве Identity Broker.Он общается с одним провайдером идентификации
  • Войдите в систему как пользователь от провайдера идентификации
  • Иногда (возможно, 1 из каждых 20 попыток) отображается диалоговое окно «Учетная запись уже существует».Я никогда не входил в систему под этим пользователем.

Есть идеи, почему это происходит?Keycloak версии 5.0.0.

Трассировка стека, о которой сообщается, когда это происходит:

keycloak_1       | 2019-05-07 20:57:06,598 ERROR [org.keycloak.broker.oidc.AbstractOAuth2IdentityProvider] [cid: 9d4851670ce44e17a39a8910c2a3f24d] (default task-13) Failed to make identity provider oauth callback: java.lang.IllegalStateException: Not found in database
keycloak_1       |  at org.keycloak.models.cache.infinispan.UserAdapter.getDelegateForUpdate(UserAdapter.java:67)
keycloak_1       |  at org.keycloak.models.cache.infinispan.UserAdapter.setSingleAttribute(UserAdapter.java:136)
keycloak_1       |  at org.keycloak.broker.provider.HardcodedAttributeMapper.updateBrokeredUser(HardcodedAttributeMapper.java:97)
keycloak_1       |  at org.keycloak.services.resources.IdentityBrokerService.updateFederatedIdentity(IdentityBrokerService.java:968)
keycloak_1       |  at org.keycloak.services.resources.IdentityBrokerService.authenticated(IdentityBrokerService.java:578)
keycloak_1       |  at org.keycloak.broker.oidc.AbstractOAuth2IdentityProvider$Endpoint.authResponse(AbstractOAuth2IdentityProvider.java:432)

1 Ответ

0 голосов
/ 09 мая 2019

Мы выяснили, что проблема связана с задержкой в ​​сети между Keycloak и нашим экземпляром MySQL. Мы наблюдали проблемы с подключением к базе данных и генерацию схемы Liquibase при запуске Keycloak.

Теория о том, почему мы увидели эту конкретную проблему:

  • В момент времени t = 0 пользователь пытается войти через провайдера идентификации. Вход в систему успешен, и пользователь затем перенаправляется на конечную точку Keycloak /endpoint.
  • При t = 30 пользователь раздражается тем, сколько времени требуется для входа в систему, и пытается снова войти в систему. Пользователь снова успешно входит в систему поставщика удостоверений, а затем перенаправляется на конечную точку Keycloak /endpoint.
  • При t = 50 начальная последовательность входа в систему вставляет пользователя, предоставленного через провайдера идентификации, в базу данных Keycloak.
  • При t = 70 вторая последовательность входа в систему пытается вставить пользователя, но завершается неудачно с нарушением ограничения (Duplicate user), поскольку пользователь уже был вставлен. Это приводит к перенаправлению на страницу first-browser-login, на которой отображается диалоговое окно «Учетная запись уже существует».
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...