Keycloak自定义以在身份验证流程中运行自定义Java

sud*_*ang 9 java architecture security redhat keycloak

请让我知道这是否不是发布的正确位置,但是我一直在寻找有关此问题的信息,而且似乎找不到简明的答案。

我一直在尝试使用keycloak来满足我们应用程序的用户管理要求。虽然我发现keycloak非常有效并且很有效,但是我碰到了可能对我们的使用来说是死胡同。

背景:

传统上,我们的应用程序使用了非常基本的登录框架来验证身份验证。然后使用我们无法更改的第三方应用程序,通过wsdl操作确定用户将具有的角色,并将其插入我们的应用程序数据库。

例如,如果我们验证用户John Doe的存在并验证其凭据,我们将在Java代码中调用wsdl以获取该用户应具有的角色(超级用户,来宾,常规用户)。显然,整个框架都是有缺陷的,归根结底,这就是为什么我们选择使用keycloak的原因。

问题

不幸的是,正如我提到的,我们不能更改第三方应用程序,并且必须从此wsdl操作中获取用户角色映射。我知道有一种方法可以通过java函数创建/修改keycloak的用户和角色。但是,为了保持此体系结构的模块化,是否有一种方法可以配置身份验证流,以便在密钥斗篷端将此WSDL扩展到角色映射?(即不在应用程序代码中,但可能在身份验证流程中的代码片段中)

我要寻找的实际上是如何配置身份验证流,以便在验证凭据之后但在授予访问权限之前,在Java中运行像“ hello world”一样简单的操作。

不确定是否可以使用身份验证SPI

Tai*_*air 5

你需要的是用户存储SPI。Keycloak 文档提供了一个很好的演练,实现了一个简单的基于文件的用户存储提供程序。是文档中使用的示例项目的完整源代码。

用户存储 SPI 非常广泛,因此 Keycloak 提供了 2 种方法来重用 Keycloak 中已有的功能:

  1. 让您的用户位于外部数据库中并使用 Keycloak 功能对其进行扩充
  2. 将用户存储在Keycloak中并从外部数据库导入相关信息

每种方法的优点和缺点都有记录。使用上述方法之一,您可以实现一个仅使用远程服务进行用户组管理的小型提供商。