为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 电子邮件主题添加样式?