使用 SSO(例如 Keycloak),如何处理/同步自己数据库中的用户?

2023-12-01

考虑以下场景:您有一个 SSO 服务(比方说 Keycloak)和 X 应用程序,它们有自己的数据库,在每个数据库的某个位置,您引用一个user_id。这要怎么处理呢?如何解决外来约束问题?是否应该同步 Keycloak 和应用程序?如何?有哪些最佳实践?有哪些经验?


我已经使用Keycloak好几年了,根据我的经验,有几种关于在Keycloak之间同步用户数据的场景 和您的应用程序的数据库:

您的应用程序是用户数据的所有者。

Keycloak 仅用于身份验证/授权目的。在这种情况下,您的应用程序会在需要时使用 admin Rest API 创建/更新 keycloak 用户。

Keycloak 是用户数据的所有者,除了数据库中的用户 ID 之外,您不需要更多信息。

在这种情况下,与用户有关的所有内容都可以由 Keycloak 管理(注册、用户帐户参数,甚至使用授权服务的资源共享)。 需要时可以通过数据库中的 userid 来引用用户。

注意:您可以使用用户属性轻松地向 Keycloak 中的用户添加自定义数据,但一种有趣的可能性是直接使用以下方法扩展用户模型:https://www.keycloak.org/docs/latest/server_development/index.html#_extensions_jpa

Keycloak 是用户数据的所有者,您需要的不仅仅是用户 ID(电子邮件、名字等)

如果性能不是问题,您可以在需要时通过 Admin Rest API 检索用户信息。

如果性能是一个问题,您将需要在应用程序的数据库中保留 Keycloak 用户数据的副本,并且您希望在每次用户更改时更新该副本。 为此,您可以在 keycloak 中实现回调(使用 SPI:https://www.keycloak.org/docs/latest/server_development/index.html#_events),这将在创建/更新用户时通知您的应用程序。

注意:您还可以使用变更数据捕获工具(例如 Debezium:https://debezium.io/)将 Keycloak 的数据库与您的数据库同步。

每种情况都有优点和缺点,您必须选择更适合您需求的一种:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SSO(例如 Keycloak),如何处理/同步自己数据库中的用户? 的相关文章

  • 用于 C# 和 iPhone 应用程序的 MongoDB

    我正处于设计应用程序的初始阶段 该应用程序将具有用 C 实现的后端 该后端将使用 IIS 上托管的 WCF Web 服务为其他平台提供数据 iPhone 就是其中之一 由于是个人项目 所以想用它来学习MongoDB 我已经知道有社区开发的
  • C# 中的监视器与互斥体[重复]

    这个问题在这里已经有答案了 可能的重复 C 中各种线程同步选项之间有什么区别 https stackoverflow com questions 301160 what are the differences between various
  • 多个 Nodejs 应用程序的单点登录

    我们有 3 个 Nodejs Web 应用程序 在具有多个子域的同一 vps 上的同一域名上运行 并为每个应用程序实现护照身份验证 我们希望单个用户能够使用单个帐户访问所有应用程序 因此我们仅出于帐户管理的目的添加了accounts exa
  • Keycloak 社交登录 REST API

    我已经为我的 keycloak 实例启用了谷歌社交登录 但我需要将其用作休息服务 是否有可用于执行此操作的端点 Keycloak 中没有 Google 身份验证 API 但您可以使用以下方法解决它代币交换 https www keycloa
  • 如何使用 SyncAdapter 处理远程服务器的 RESTful 更新

    我观看了 Google I O REST 演讲并阅读了幻灯片 http www google com events io 2010 sessions developing RESTful android apps html http www
  • 如何确保使用 Microsoft Sync Framework 同步成功?

    我正在使用微软同步框架 https msdn microsoft com en us sync bb736753 aspx同步两个 Microsoft SQL Server 上的表 我创建了一个测试应用程序 它每秒在远程服务器上的表中生成一
  • Adobe AIR 应用程序能否实现针对 Active Directory 的 SSO 身份验证?

    我对 AIR 应用程序了解不多 但我喜欢目前所看到的内容 所以现在 我想知道这种类型的应用程序在工作中的内联网中是否有意义 在投入时间和精力加强 AIR 开发之前 我想知道 Windows 上的 AIR 应用程序是否可以针对 Active
  • Spring Oauth2 使用 Spring Boot 2.0 返回 401 Unauthorized 错误

    我正在尝试使用 spring oauth2 实现 SSO 对于 spring 1 5 x 它工作得很好 但是 一旦我将 oauth 服务器应用程序升级到 spring boot 2 2 3 RELEASE 我什至无法进入登录表单 即将 ht
  • Android 上的 SQLite 和 MongoDB 具有同步功能

    是否可以在 Android 上使用 SQLite 在服务器上使用像 MongoDB 这样的 NoSQL 数据库 并在两者之间进行 2 路数据复制 同步 或者最好在两端使用 SQL 或者在两端使用 NoSQL 但不要混合使用 有几种不同的方法
  • Keycloak - 如何获取某个领域的所有用户并将其保存到应用程序数据库?

    我正在使用 Spring Boot 构建 REST API 并使用 Keycloak 进行身份验证和授权 由于用户是由Keycloak管理的 所以我的应用程序数据库没有用户的数据 但我想将 Keycloak 中的用户实体的一些属性存储在我的
  • 主线程如何在该线程之前运行?

    我有以下代码 public class Derived implements Runnable private int num public synchronized void setA int num try Thread sleep 1
  • 如何使用Python多处理创建同步对象?

    我无法弄清楚如何创建同步的 Python 对象 我有一个名为 Observation 的类和一个名为 Variable 的类 基本上看起来像这样 代码被简化以显示本质 class Observation def init self date
  • .NET 单点登录

    我一直在尝试使用 C 为 NET Web 应用程序实现 WEB SSO 服务提供程序插件 我将使用 shibboleth 身份提供商 我已经使用 OpenSAML 库为 java 应用程序实现了相同的功能 我想知道在 NET 应用程序中使用
  • 使用 Windows 锁定屏幕后删除 Kerberos 缓存票证

    无论如何 有没有办法阻止 Kerberos 缓存的票证在 Windows 进入锁定屏幕后被删除 首次登录 Windows 时 klist exe 显示 2 个缓存票证 但是 发生 Windows 锁屏事件后 klist exe 显示 0 个
  • C++:Linux平台上的线程同步场景

    我正在为 Linux 平台实现多线程 C 程序 其中我需要类似于 WaitForMultipleObjects 的功能 在搜索解决方案时 我发现有一些文章描述了如何在 Linux 中实现 WaitForMultipleObjects 功能
  • 父进程和子进程如何进行信号量操作?

    semget 调用是否在父进程和子进程之间共享信号量 我有这段代码 对于相同的代码 我观察到如果父进程首先运行 子进程有时会获得更改后的信号量值 但是当子进程首先运行时 父进程似乎永远不会携带更改后的信号量 为什么会发生这种情况 谁能向我解
  • 命名互斥体的 Mono 替代方案

    在 Windows NET 上 命名的互斥体可用于同步多个进程 不幸的是 Mono 在 Linux 上不太支持这一点 他们的发行说明 http www mono project com Release Notes Mono 2 8 Shar
  • Keycloak - 代理后面的 URL 重置密码电子邮件

    我们正在使用钥匙斗篷 2 0 0 Final安装在后面Nginx 代理在 RedHat 环境上 我们目前面临的问题是重设密码使用内部服务器主机而不是操作 URL 中的外部服务器发送电子邮件的功能 因为我们位于代理后面 我通过电子邮件收到此信
  • 关于Java同步的问题

    Java 文档说 同一对象上的同步方法的两次调用不可能交错 我需要知道的是同步是否也会阻止两个不同的同步方法同一类的实例来自交错 例如 Worker 类有一个名为 process 的方法 我们有几个 Worker 实例在它们自己的线程中运行
  • 如何在keycloak中动态编辑standalone.xml文件

    我正在尝试通过 docker 编辑standalone xml 并尝试添加 但 keycloak 正在使用它standalone xml 但我可以看到standalone xml 文件中的更改 我需要在standalone xml 文件中添

随机推荐