首页 > 解决方案 > Keycloak:第一次尝试登录时间歇性显示“帐户已存在”对话框

问题描述

我在 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)

标签: keycloak

解决方案


我们将此问题追溯到 Keycloak 和我们的 MySQL 实例之间的网络延迟问题。我们在启动 Keycloak 时观察到数据库连接问题和 Liquibase 模式生成。

关于我们为什么看到这个特定问题的理论:

  • 在时间 t=0,用户尝试通过身份提供者登录。登录成功,然后用户被重定向到 Keycloak/endpoint端点。
  • 在 t=30 时,用户对登录所需的时间感到恼火,并尝试再次登录。用户再次成功登录到身份提供者,然后被重定向到 Keycloak/endpoint端点。
  • 在 t=50,初始登录序列将通过身份提供者提供的用户插入 Keycloak 数据库。
  • 在 t=70 时,第二个登录序列尝试插入用户,但Duplicate user由于用户已经插入而失败并违反约束 ( )。这会导致重定向到first-browser-login显示“帐户已存在”对话框的页面。

推荐阅读