总结
豆包 AI 助手文章总结
首页 > Java > java教程 > 正文

如何用Java解析next-auth生成的JWT Token并获取其中的信息?

心靈之曲
发布: 2025-03-23 10:30:02
原创
586人浏览过

使用java解密next-auth生成的jwt token并获取信息

在使用next-auth生成jwt token时,我们会遇到一个问题:如何用java解析这些token并获取其中的信息?这是一个非常实用的需求,特别是在需要进行跨平台验证和数据提取时。

我使用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解析这个token时,报错如下:

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();
    }
}
登录后复制

报错信息:

立即学习Java免费学习笔记(深入)”;

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)
登录后复制

问题在于next-auth生成的token是经过加密的,仅供当前应用使用。如果想要在第三方应用中使用token,可以在登录后在session中设置一个自定义的token。例如:

session.accessToken = your_token
登录后复制

通过这种方式,我们可以在java中处理这些token,并获取其中的信息。

以上就是如何用Java解析next-auth生成的JWT Token并获取其中的信息?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号