密钥泄漏:首次尝试登录时间歇性显示“帐户已存在”对话框

时间:2019-05-06 23:18:02

标签: keycloak

我在Keycloak中看到一个奇怪的情况:

  • 将Keycloak配置为Identity Broker。它与一个身份提供商对话
  • 以用户身份从身份提供商登录
  • 有时(也许每20次尝试1次),将显示“帐户已存在”对话框。我以前从未以该用户身份登录。

关于为什么发生这种情况的任何想法? 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 :(得分:0)

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

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

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