解码 Keycloak JWT 令牌

pix*_*xel 5 keycloak

我正在尝试验证 JWT 令牌(并从中读取角色)。遗憾的是,由于我的整体应用程序架构,我无法使用任何适配器或自动配置。

像任何其他 JWT 令牌一样解码该令牌是没有问题的,但我想知道 Keycloak 是否有一个库来存档此目标。(例如,只需将令牌解析为类似 KeycloakJWTToken 的内容,并通过从 Keycloak 服务器获取机密来验证它)

有什么好用的客户端之类的吗?

Tac*_*oco 1

我正在使用 Jose4J 库: https://bitbucket.org/b_c/jose4j/wiki/Home

读取 JWT 令牌内的声明非常简单:

import org.jose4j.jwt.JwtClaims;
import org.jose4j.jwt.consumer.JwtConsumer;
import org.jose4j.jwt.consumer.JwtConsumerBuilder;

public void parseJWT(String token) throws Exception {              
       JwtConsumer consumer = new JwtConsumerBuilder()
               .setSkipAllValidators()
               .setDisableRequireSignature()
               .setSkipSignatureVerification()
               .build();
       JwtClaims claims = consumer.processToClaims(token);       
       System.out.println("* Parsed token: "+ claims.getRawJson() );       
       System.out.println("* Expiration date: " + new Date(claims.getExpirationTime().getValueInMillis()) );       
}
Run Code Online (Sandbox Code Playgroud)

GitHub 上提供了更多示例: https://github.com/pvliesdonk/jose4j/blob/master/src/test/java/org/jose4j/examples/ExamplesTest.java

最后备注:您不需要密钥或秘密来解析JWT,但如果需要,您可以使用服务器(公共)密钥来验证令牌是否由您信任的 keycloak 服务器签名。

JWT 网站列出了用于令牌签名/验证的所有库:

https://jwt.io/#libraries-io