You need to enable JavaScript to run this app. 如何不使用适配器实现Keycloak JWT Token的校验与角色读取
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用适配器实现Keycloak JWT Token的校验与角色读取

可用官方库推荐

Keycloak官方提供了无适配器耦合的keycloak-core核心工具库,可以满足你纯手动解析校验JWT、获取结构化令牌对象的需求,不会引入任何自动配置或适配器相关逻辑。

依赖引入

你可以直接引入对应版本的核心包,以下是常用构建工具的坐标配置:

  • Maven配置
<dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-core</artifactId>
    <version>和你服务端匹配的Keycloak版本</version>
</dependency>
  • Gradle配置
implementation 'org.keycloak:keycloak-core:和你服务端匹配的Keycloak版本'
使用步骤

1. 准备Keycloak公钥

你可以从Keycloak管理后台对应领域的「密钥」tab下直接复制公钥字符串,也可以运行时请求Keycloak的领域公开接口获取公钥信息,再转换为对应编程语言的公钥对象。

2. 令牌校验与解析

直接使用官方封装的TokenVerifier工具类即可同时完成签名校验、字段合法性校验和结构化解析,以下为Java示例:

import org.keycloak.TokenVerifier;
import org.keycloak.representations.AccessToken;
import org.keycloak.common.util.KeyUtils;
import java.security.PublicKey;

// 公钥转换
String keycloakPublicKeyStr = "你获取到的Keycloak公钥字符串";
PublicKey publicKey = KeyUtils.getPublicKeyFromString(keycloakPublicKeyStr);

// 构造校验器,支持按需开启校验规则
TokenVerifier<AccessToken> verifier = TokenVerifier.create(待校验的JWT字符串, AccessToken.class)
        .publicKey(publicKey)
        .withDefaultChecks(); // 默认开启签名校验、过期校验、nbf校验

// 校验成功后直接得到结构化的AccessToken对象
AccessToken accessToken = verifier.verify().getToken();

3. 读取角色信息

AccessToken已经封装了角色读取的现成方法,无需手动解析claims字段:

// 获取领域级角色集合
Set<String> realmRoles = accessToken.getRealmAccess().getRoles();
// 获取指定客户端的客户端级角色集合
Set<String> clientRoles = accessToken.getResourceAccess("你的客户端ID").getRoles();
额外说明
  • 你可以根据业务需求调整校验规则,比如需要校验受众、签发方时,可额外调用对应方法配置校验项。
  • keycloak-core没有额外的框架依赖,完全可以独立使用,适配任何架构的应用。
  • 建议依赖版本和你正在使用的Keycloak服务端版本保持一致,避免出现兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 16:15:10