首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >密钥掩码JWT令牌解码

密钥掩码JWT令牌解码
EN

Stack Overflow用户
提问于 2021-05-12 14:00:56
回答 2查看 3.7K关注 0票数 1

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

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

有什么容易使用的客户吗?

EN

回答 2

Stack Overflow用户

发布于 2021-05-12 15:08:41

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

读取JWT令牌中的声明很简单:

代码语言:javascript
运行
复制
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()) );       
}

更多的例子可以在GitHub:https://github.com/pvliesdonk/jose4j/blob/master/src/test/java/org/jose4j/examples/ExamplesTest.java上找到。

最后一点:您不需要密钥,也不需要解析 JWT的秘密,但如果需要,您可以使用服务器(公共)密钥来验证--令牌是由您信任的密钥披风服务器签名的。

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

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

票数 1
EN

Stack Overflow用户

发布于 2021-05-12 17:05:17

Keycloak访问令牌实际上是JWT令牌。因此,您可以充分利用现有的JWT库,包括Keycloak正式文档中所述的验证:

--如果您需要手动验证Keycloak发出的访问令牌,您可以调用内省端点。这种方法的缺点是您必须对Keycloak服务器进行网络调用。如果同时有太多的验证请求,这可能会很慢,并且可能会使服务器超载。Keycloak颁发的访问令牌是JSON令牌(JWT),它使用JSON签名(JWS)进行数字签名和编码。因为它们是以这种方式编码的,因此允许您使用发出域的公钥在本地验证访问令牌。您可以在验证代码中硬编码领域的公钥,也可以使用包含JWS中嵌入的密钥ID ( can )的证书端点查找和缓存公钥。根据您使用哪种语言编写代码,有许多第三方库可以帮助您进行JWS验证。

此外,在Java中,使用Keycloak适配器,角色通常映射在用户主体上,即允许isUserInRole()。这是目标之一。此外,还可以将PrincipalSecurityContext中转换为KeycloakPrincipal,然后再从KeycloakPrincipal中获得KeycloakSecurityContext。使用KeycloakSecurityContext,您可以访问ID和访问令牌(如果适用的话),并且可以读取它们的属性、属性和声明。

请注意,使用Keycloak UI来“评估”标记也是很好的实践,而且非常有用。例如,您可以在Client Scopes选项卡(在Evaluate下)中看到生成的令牌,以及在客户端的授权选项卡(在“评估”下)中评估您的策略和权限。请参阅在设置客户端时,https://www.keycloak.org/docs/latest/server_admin/#_client_scopes_evaluate可能是调试和测试的最佳方式。

如果您在评估屏幕中选择了一个用户,将生成以下示例数据:

生成访问令牌(...)

  • Generated ID令牌(...)

  • Generated用户信息(.)

所有示例都是为特定用户生成的,并且是为特定客户端发出的,其作用域参数的指定值。这些示例包括所有使用的声明和角色映射。

来源:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67505168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档