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

Keycloak 3.4.2中如何使用JWT调用Admin REST API

用JWT通过Keycloak Java API(3.4.2版本)连接服务器的实现方法

我来帮你搞定用JWT连接Keycloak的问题,结合你已经调整好客户端认证方式的前提,下面是针对3.4.2版本的具体实现步骤和代码示例:

核心实现思路

要使用JWT作为凭证连接Keycloak,我们需要采用JWT Bearer Grant认证方式——把JWT作为断言(assertion)发送给Keycloak,换取访问令牌后再进行后续API操作。

代码实现步骤

1. 准备有效的JWT令牌

首先你需要有一个符合Keycloak要求的JWT令牌,它必须满足:

  • iss(签发者)必须匹配你的Keycloak Realm的Issuer URL(格式:http://你的Keycloak地址/auth/realms/你的Realm名)
  • aud(受众)必须包含你要使用的客户端ID
  • 令牌未过期,且签名能被Keycloak信任(如果是客户端私钥签名,要确保Keycloak已配置对应的公钥)

如果是Keycloak自身签发的JWT(比如从其他认证流程获取的),直接使用即可;如果需要自行生成,可以用JJWT这类库,示例代码如下:

// 引入JJWT依赖后生成JWT的示例
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.security.PrivateKey;
import java.util.Date;

String jwtToken = Jwts.builder()
    .setIssuer("http://your-keycloak-server/auth/realms/" + ADMIN_REALM)
    .setAudience("你的客户端ID")
    .setSubject("client-" + "你的客户端ID") // 主体可设为客户端标识或用户ID,按需调整
    .setExpiration(new Date(System.currentTimeMillis() + 3600000)) // 1小时有效期
    .signWith(SignatureAlgorithm.RS256, 你的客户端私钥) // 用客户端私钥完成签名
    .compact();

2. 用JWT构建Keycloak连接实例

修改你之前的KeycloakBuilder代码,切换授权类型为JWT Bearer,并传入准备好的JWT令牌:

KeycloakBuilder keycloakBuilder = KeycloakBuilder.builder()
    .serverUrl(AUTH_SERVER)
    .realm(ADMIN_REALM)
    .grantType("urn:ietf:params:oauth:grant-type:jwt-bearer") // 指定JWT Bearer授权类型
    .clientId("你的客户端ID") // 需与JWT的aud声明完全匹配
    .jwtToken(jwtToken) // 传入准备好的JWT令牌
    .resteasyClient(client); // 复用你之前的ResteasyClient实例

// 构建Keycloak实例,后续即可用它调用各类Admin API
Keycloak keycloak = keycloakBuilder.build();

关键注意事项

  • 确保你的客户端认证方式已设置为JWT(你已经完成这一步,无需重复操作)
  • 若使用自行生成的JWT,一定要在Keycloak客户端配置中上传对应的公钥,否则Keycloak会验证签名失败
  • 保证keycloak-admin-client依赖版本与Keycloak服务器版本(3.4.2)完全一致,避免兼容性问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:21:47