为Keycloak添加自定义API

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为Keycloak添加自定义API相关的知识,希望对你有一定的参考价值。

参考技术A 添加机制 Service Provider Interfaces (SPI)

我们创建一个不需要认证授权就可以访问的API,然后返回用户列表

添加依赖

整体文件结构如下

DemoRestProviderFactory 和 DemoRestProvider 分别实现接口 org.keycloak.services.resource.RealmResourceProviderFactory 和 org.keycloak.services.resource.RealmResourceProvider

DemoRestProviderFactory 将会定义 REST API 名称,并且在构造器中创建DemoRestProvider实例

DemoRestProviderFactory.java

DemoRestProvider.java

UserDetails.java

使用 SPI 机制添加factory class 到keycloak
添加文件org.keycloak.services.resource.RealmResourceProviderFactory 到 src\main\resources\META-INF

添加文件jboss-deployment-structure.xml到 src\main\resources

jboss-deployment-structure.xml

org.keycloak.services.resource.RealmResourceProviderFactory 的内容为
gaurav.keycloak.DemoRestProviderFactory

运行 maven package,生成的jar包放入keycloak-12.0.2\standalone\deployments 内会自动生成keycloak-rest-api-1.0.jar.deployed 文件

进入keycloak

创建一个realm GW,然后在GW下随便添加几个用户。

参考
参考2
源码

如何通过employeeNumber或自定义属性搜索keycloak用户?

【中文标题】如何通过employeeNumber或自定义属性搜索keycloak用户?【英文标题】:How to search keycloak users by employeeNumber or by custom attributes? 【发布时间】:2021-03-22 20:37:42 【问题描述】:

我想使用employeeNumber 搜索keycloak 用户。我尝试检查 keycloak 文档,但没有找到任何基于employeeNumber/自定义属性进行搜索的 API。我正在使用下面的 API 来搜索具有管理员权限的用户。

http://localhost:8080/auth/admin/realms/Demo-Realm/users/?firstName=akshay

也试过

http://localhost:8080/auth/admin/realms/Demo-Realm/users/?search=akshay

【问题讨论】:

【参考方案1】:

开箱即用,您可以从Keycloak Admin API 为端点执行:

GET /realm/users

人们可以阅读:

Get users 返回用户列表,根据查询过滤 参数

那些(可选)查询参数是:

briefRepresentation(布尔值); 电子邮件(字符串); 第一个(字符串); 名字(字符串); 姓氏(字符串); max(最大结果大小(默认为 100))(整数); 搜索(包含在用户名、名字或姓氏或电子邮件中的字符串); 用户名(字符串)。

如您所见,您无法搜索自定义属性。一个不太好的解决方案是获取所有用户 (max=-1),然后通过自定义属性进行过滤。

另一个选项是通过添加您自己的自定义服务提供者接口 (SPI) 并添加您的自定义端点来扩展 Keycloak 功能。在那里,您可以利用UserQueryProvider 接口中的searchForUserByUserAttribute 方法。

【讨论】:

以上是关于为Keycloak添加自定义API的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security 和 Keycloak 因自定义身份验证提供程序而失败

有没有办法为我的自定义 Keycloak 电子邮件主题添加样式?

部署keycloak自定义spi部署

如何通过employeeNumber或自定义属性搜索keycloak用户?

钥匙斗篷 |如何添加自定义 keycloak 密码策略?

Keycloak 使用自定义协议映射器从数据库/外部源添加额外声明