You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keycloak 15.0.2(WildFly)如何扩展/admin路径下的REST API

在Keycloak 15.0.2(WildFly版)的/admin路径下添加自定义端点

完全可以将自定义API迁移到{{server}}/auth/admin/realms/{{realm}}/myApi路径下,以下是具体实现步骤:

1. 替换资源提供者接口

Keycloak的admin路径下的资源扩展需要使用AdminResourceProvider和AdminResourceProviderFactory接口,而非 realm 级别扩展用的RealmResourceProvider:

自定义Admin资源类

import org.keycloak.services.resource.admin.AdminResource;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

public class MyAdminApiResource extends AdminResource {

    @Path("myApi")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public String getMyApiData() {
        // 自定义业务逻辑
        return "{\"message\": \"Hello from admin custom endpoint\"}";
    }
}

实现Admin资源提供者工厂

import org.keycloak.Config;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.KeycloakSessionFactory;
import org.keycloak.services.resource.admin.AdminResourceProvider;
import org.keycloak.services.resource.admin.AdminResourceProviderFactory;

public class MyAdminApiProviderFactory implements AdminResourceProviderFactory {

    @Override
    public AdminResourceProvider create(KeycloakSession session) {
        return new MyAdminApiResource(session);
    }

    @Override
    public void init(Config.Scope config) {}

    @Override
    public void postInit(KeycloakSessionFactory factory) {}

    @Override
    public void close() {}

    @Override
    public String getId() {
        // 唯一标识该提供者,可自定义
        return "my-admin-api";
    }
}

2. 注册SPI

在项目的META-INF/services目录下创建文件org.keycloak.services.resource.admin.AdminResourceProviderFactory,文件内容为自定义工厂类的全限定名:

com.yourcompany.keycloak.extension.MyAdminApiProviderFactory

3. 权限控制(合规必备)

由于/admin路径属于受保护的管理端点,自定义接口会自动继承AdminResource的权限机制,你可以通过以下方式强化权限:

  • 使用@RolesAllowed注解指定允许访问的角色,比如限制仅realm-admin角色可访问:
    import javax.annotation.security.RolesAllowed;
    
    @Path("myApi")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @RolesAllowed("realm-admin")
    public String getMyApiData() {
        // 业务逻辑
    }
    
  • 若需要自定义权限逻辑,可通过KeycloakSession获取当前用户的权限信息进行校验。

4. 打包部署

将项目打包成JAR文件,放到Keycloak服务器的standalone/deployments目录下,WildFly会自动完成部署。

测试验证

获取管理员权限的Access Token后,调用{{server}}/auth/admin/realms/{{realm}}/myApi,即可访问自定义端点。

内容的提问来源于stack exchange,提问作者Leoz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 19:55:18