首页 > 文章列表 > Java如何解析Next-Auth生成的JWT Token并获取用户信息?

Java如何解析Next-Auth生成的JWT Token并获取用户信息?

166 2025-01-22

Java如何解析Next-Auth生成的JWT Token并获取用户信息?

在 java 中解析 next-auth jwt token 获取信息

next-auth 是一个流行的 node.js 库,用于身份验证和授权。它生成的 jwt token 被加密,只能由当前应用程序使用。如果您希望第三方解析 token,可以在登录后在会话中设置自定义令牌。

以下是 java 代码样例,演示如何解析 next-auth jwt token:

import io.jsonwebtoken.*;

public class DecodeNextAuth {

    public static void main(String[] args) {
        // 生成的 JWT token
        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)
                    .getBody();

            // 从 Claims 对象中获取信息
            String subject = claims.getSubject();
            // ... 获取其他 claim 信息

            System.out.println("Subject: " + subject);
            // ... 打印其他信息

        } catch (Exception e) {
            // 处理异常,可能是签名无效、token 过期或其他问题
            e.printStackTrace();
        }
    }
}

注意:如果解析过程中出现 "jwt strings must contain exactly 2 period characters" 异常,可能是 next-auth 修改了 jwt 结构,不再包含两个句点字符。在这种情况下,需要重新校对解析代码或使用 next-auth api 方法获取必要的信息。

来源:1733044699