在java中创建带有头,有效负载和签名的JWT

问题描述 投票:1回答:1

我想为给定的标头,有效负载和密钥生成一个jwt。

我的头;

{“typ”:“JWT”,“alg”:“HS256”}

我的有效载荷

{“iss”:“46181382”,“ist”:“project”,“iat”:1536225835,“exp”:1536226835,“jti”:“abcdefghi”}

我的密钥; 105446462291847624638651561dfg156148df941819498

这是我的java代码,它已经创建了一个jwt。但我认为秘密密钥不包括在内。因为一旦我在tokbox api调用中使用该jwt作为我的标题,我得到以下响应。

 {
"code": -1,
"message": "Invalid signature",
"description": "Invalid signature"
}

这是代码;

    byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("105446462291847624638651561dfg156148df941819498");
    Key signingKey = new SecretKeySpec(apiKeySecretBytes, SignatureAlgorithm.HS256.getJcaName());

    Map map = new HashMap<String,Object>();
    map.put("alg","HS256");
    map.put("typ","JWT");

    String jwt = Jwts.builder()
            .setHeader(map)
            .claim("iss", "46181382")
            .claim("ist", "project")
            .claim("iat", currentTimeSeconds())
            .claim("exp", expireTimeSeconds())
            .claim("jti", "abcdefghi")
            .signWith(SignatureAlgorithm.HS256,signingKey)
            .compact();

currentTimeSeconds()和expireTimeSeconds()是我自己编写的方法。我相信他们没有问题。我不确定这个.signWith()方法。

任何人都可以帮助我。

谢谢。

java jwt tokbox
1个回答
0
投票

我找到了答案。在上面的代码中,密钥应该作为Base64URL编码值给出。这意味着第一行应该如下改变。

byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("MTA1NDQ2NDYyMjkxODQ3NjI0NjM4NjUxNTYxZGZnMTU2MTQ4ZGY5NDE4MTk0OTg=");
© www.soinside.com 2019 - 2024. All rights reserved.