当前位置: 首页 > 知识库问答 >
问题:

java如何解密next-auth 生成的jwt token获取里面的信息?

汝楷
2024-04-15

我使用了next-auth生成了jwt token,并设置了AUTH_SECRET=123456,如下所示:

callbacks: {        // Ref: https://authjs.dev/guides/basics/role-based-access-control#persisting-the-role        async jwt({token, user}) {            return token        },        // If you want to use the role in client components        async session({session,user, token}) {            return session        },    }

这是生成的jwt token

eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIiwia2lkIjoib0Y4SU1ycV9sZUxRYXhSeVZnZVNsUXc4VFNabnRrd1R0NmZ1bnZ1ZzhBT2gtR2J1Wkp4dnhHRllQb3FUaVYtRl92YzAtWGxQUjdaRlRLdkVON181VHcifQ..DiXTEIywelVgcF5MuHYlQQ.TscvRH0uxEwyDfJ5g2sN_81ivsFsxPA5FfydYCfw8w_n-qmyH3nBKLp1COg1Vbo2vbyPSnoRmsFDI6nXzZYO264rvqsCAZdmrZL1LF-HLDTUxuPy8KUgiG828P1TPeipX8huemr_h6Yk7MwgMFdqW7dTZbReYvfa-mtSMYkq_10gIgjGLHfd-YZR7En_-77GqXoaryLUOaiZxGe8iya3TMbyTDs9sgN55CvVnRdYcAK6Gy4ptLMiKw0pINdSICgYZhYhjYRfB1VCHzVmjwZeLxpWrWbJgN52tWmfc3xiOwbVsFsYfvR0znt6mvDQw5lNYtDQ-tvUCDwWm-Xdrra5gw.bwAf05t99YvB1QyBgBFVpik9T_Zup2Yq5XuG26h7Qng

但是我使用java 解析的时候报错,如何解决?

static void me() {        String jwt = "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIiwia2lkIjoib0Y4SU1ycV9sZUxRYXhSeVZnZVNsUXc4VFNabnRrd1R0NmZ1bnZ1ZzhBT2gtR2J1Wkp4dnhHRllQb3FUaVYtRl92YzAtWGxQUjdaRlRLdkVON181VHcifQ..DiXTEIywelVgcF5MuHYlQQ.TscvRH0uxEwyDfJ5g2sN_81ivsFsxPA5FfydYCfw8w_n-qmyH3nBKLp1COg1Vbo2vbyPSnoRmsFDI6nXzZYO264rvqsCAZdmrZL1LF-HLDTUxuPy8KUgiG828P1TPeipX8huemr_h6Yk7MwgMFdqW7dTZbReYvfa-mtSMYkq_10gIgjGLHfd-YZR7En_-77GqXoaryLUOaiZxGe8iya3TMbyTDs9sgN55CvVnRdYcAK6Gy4ptLMiKw0pINdSICgYZhYhjYRfB1VCHzVmjwZeLxpWrWbJgN52tWmfc3xiOwbVsFsYfvR0znt6mvDQw5lNYtDQ-tvUCDwWm-Xdrra5gw.bwAf05t99YvB1QyBgBFVpik9T_Zup2Yq5XuG26h7Qng";        try {            // 配置JWT解析器,设置签名密钥和允许的算法            Claims claims = Jwts.parserBuilder()                    .setSigningKey("123456") // 设置签名密钥                    .setAllowedClockSkewSeconds(60) // 允许的时间偏差(可选)                    .build()                    .parseClaimsJws(jwt) // 解析token,并自动验证签名                    .getBody(); // 获取Claims对象            // 从Claims对象中获取你需要的信息            String subject = claims.getSubject();            // ... 获取其他claim信息            System.out.println("Subject: " + subject);            // ... 打印其他信息        } catch (Exception e) {            // 处理异常,可能是签名无效、token过期或其他问题            e.printStackTrace();        }    }

报错信息:

io.jsonwebtoken.MalformedJwtException: JWT strings must contain exactly 2 period characters. Found: 4        at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:296)        at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:550)        at io.jsonwebtoken.impl.DefaultJwtParser.parseClaimsJws(DefaultJwtParser.java:610)        at io.jsonwebtoken.impl.ImmutableJwtParser.parseClaimsJws(ImmutableJwtParser.java:173)        at com.seaurl.gatewaysvr.GatewayServerApplication.me(GatewayServerApplication.java:32)        at com.seaurl.gatewaysvr.GatewayServerApplication.main(GatewayServerApplication.java:49)

共有1个答案

濮阳品
2024-04-15

image.png
原始数据有问题,JWT数据的可以根据 “.” 分割成三段; 第一段和第二段可以直接base64解码得到明文数据; 第三段是根据第一段和第二段以及密钥hash生成的数据,确保前两段数据没有被篡改

 类似资料:
  • 问题内容: 我不明白如何使用commons-dbutils获取自动生成的密钥? 问题答案: 您可以使用。下面是一个例子。给定一个名为的表,该表具有一个自动生成的主键列和一个名为的列,您可以执行以下操作:

  • 问题内容: 我正在编写几个Java程序,在完成我想做的所有事情之后,需要在单独的JVM中终止/清理工作。为此,我将需要获取要创建的Java进程的PID。 问题答案: 在Windows和Unix上均可使用。您可以使用从Java程序中调用此命令。的样本输出如下 您可能需要对此进行解析,然后检查标准名称,然后从相应的行中获取pid。

  • 问题内容: 如何使用MyBatis获取插入的生成密钥?我阅读了许多有关此问题的页面,但仍然被屏蔽,请问有人可以帮助我吗?这是我的代码: 桌子: 道: mapper.java: mapper.xml 怎么了?如何获得此插入的生成的密钥?谢谢! 问题答案: 如果要获取生成的主键,则应通过或传递参数。 调用映射方法时,将值映射。

  • 在Java代码中,我应该解密一个加密的单词,如下所示: 我是加密新手,但是我发现了一些如何用Java加密/解密一些AES/CBC的示例。但是它需要盐、密钥和Iv。我发现OpenSsl正在从“密码”中导出这些值,但我没有发现如何Java解密加密值。 有人知道它是怎么工作的吗?盐、钥匙和/或Iv是否存储在加密值中?谢谢你的回答。

  • 问题内容: 我正在使用JDBC批处理插入插入许多记录。有什么方法可以获取每个记录的生成密钥吗?我可以配合批量插入使用吗? 我在用 我正在考虑与循环一起使用以获得所需的结果。还有其他解决方案吗? 问题答案: 似乎Oracle 12c不支持根据以下页面将自动生成的密钥与批处理更新结合使用: http://docs.oracle.com/cd/E16655_01/java.121/e17657/jdbc

  • 我正在使用CXF Web客户端调用Soap Web服务。 WSDL2JAVA用于从wsdl生成Java代码。有来自soap头的信息,但生成的代码没有访问该头的方法。 如何通过CXF Web客户端获取标题信息?