我如何从 JWT 获得索赔?

Cha*_*les 6 java jwt jose4j

我需要从 JWT 中提取声明。

看来这应该是理所当然的事情。

它已签名,从我得到的标题中:

{
  "alg": "RS256",
  "typ": "JWT"
}
Run Code Online (Sandbox Code Playgroud)

智威汤逊:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJtYXJrLnN0YW5nQGRoaWdyb3VwaW5jLmNvbSIsInNjb3BlIjpbIm9wZW5pZCJdLCJyb2xlcyI6WyJKT0JTRUVLRVIi XSwiam9ic2Vla2VySWQiOiJ3TDFkTWdQckZWOUl5dEZZIiwiZXhwIjoxNDg4Mzk1ODE5LCJhdXRob3JpdGllcyI6WyJKT0JTRUVLRVIiXSwianRpIjoiNWRiYjNkYzQtNGI3NC00MDYyLTgzMmQtYjE1MTgw YWZhZjllIiwiY2xpZW50X2lkIjoiZWZjIn0.NxiF4x39na3KdDUFz2zxqy1zSfJkj4FdKHflpgJUxzMgBq8bbJIFVkmwAUYA6_YXm6kGFcyTMgdiRIJpqc5buDPdV1vkzh4QKFTxMz9MF4i3vtIQ21V m5W12KikWdWGGUXMD4udJwu7rmuIBtNIa-ciZOPADNrrXfuw7iML1xxAA-C0f4OTbiKqiXr3QEUZwcqZB17qfh_dVRRxgO-_uHUg84JDcpXEDQPzPWX68u1EHH4J6IcpMKn1VY9k3RcZU6pq-ndzQgBlKd VM2owA6i-UM9p1zSz7ZX_2wx0czEEcNF1rMdeIv5yxP9YEpWb14-GUG4qgpn_rAIQBJ7eu7xw

它在 jwt.io 网站上解码得很好,但由于我没有“秘密”密钥,所以它显示为“无效签名”。这很好,我不想验证它。

我想要的只是声明,但是当我使用 Java 库对其进行解码时,除了错误之外什么也没有得到。

如果我手动解码它(即 split/base64 解码),那就没问题了。

那么,我对 Java 库做错了什么?

cas*_*lin 9

一旦问题被标记为,我知道您正在使用jose4j来解析 JWT 令牌。

在这种情况下,您可以setSkipSignatureVerification()JwtConsumerBuilder. 它允许您在不验证签名的情况下解析声明:

JwtConsumer jwtConsumer = new JwtConsumerBuilder()
                                  .setSkipSignatureVerification()
                                  .build();
                                                  
JwtClaims jwtClaims = jwtConsumer.processToClaims(jwt);
Run Code Online (Sandbox Code Playgroud)