keycloak - Keycloak:第一次尝试登录时间歇性显示“帐户已存在”对话框
问题描述
我在 Keycloak 中看到了一个奇怪的场景:
- 将 Keycloak 配置为身份代理。它与一个身份提供者对话
- 以身份提供者的用户身份登录
- 偶尔(可能每 20 次尝试中 1 次)会显示“帐户已存在”对话框。我以前从未以该用户身份登录过。
关于为什么会发生这种情况的任何想法?密钥斗篷版本 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 和我们的 MySQL 实例之间的网络延迟问题。我们在启动 Keycloak 时观察到数据库连接问题和 Liquibase 模式生成。
关于我们为什么看到这个特定问题的理论:
- 在时间 t=0,用户尝试通过身份提供者登录。登录成功,然后用户被重定向到 Keycloak
/endpoint
端点。 - 在 t=30 时,用户对登录所需的时间感到恼火,并尝试再次登录。用户再次成功登录到身份提供者,然后被重定向到 Keycloak
/endpoint
端点。 - 在 t=50,初始登录序列将通过身份提供者提供的用户插入 Keycloak 数据库。
- 在 t=70 时,第二个登录序列尝试插入用户,但
Duplicate user
由于用户已经插入而失败并违反约束 ( )。这会导致重定向到first-browser-login
显示“帐户已存在”对话框的页面。
推荐阅读
- azure - 如何在 Azure AD B2C 中创建具有唯一用户名但允许相同电子邮件地址的多个帐户?
- python - 正则表达式找到最大的重复模式?
- html - 我无法在 vs code html 中添加图片,显示错误无法解决,但同样的问题在记事本上如何工作?
- c++ - 复制构造函数 + 浅拷贝和深拷贝
- excel - Excel Replace Using Formula
- swift - 来自另一个集合 Firebase Firestore 的动态批量更新
- c# - 使用除法的数组乘积[C#]
- java - 您如何在特定日期创建倒计时?
- python - 如何在 Tkinter 中使用相同的根目录但不同的文件制作按钮?
- python - 在python中重用聚类算法