我想为给定的标头,有效负载和密钥生成一个jwt。
我的标题;
{ “ typ”:“ JWT”, “ alg”:“ HS256” }
我的有效载荷;
{ “ iss”:“ 46181382”, “ ist”:“项目”, “ iat”:1536225835, “ exp”:1536226835, “ jti”:“ abcdefghi” }
我的秘密密钥; 105446462291847624638651561dfg156148df941819498
这是我的Java代码,它已经创建了一个jwt。但我认为秘密密钥并未包含在内。因为一旦我将jwt用于tokbox api调用中的标头,我就会得到以下响应。
{
"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()方法。
有人可以帮助我吗?
谢谢。
答案 0 :(得分:0)
我找到了答案。在上面的代码中,密钥应作为Base64URL编码的值给出。这意味着第一行应更改如下。
byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("MTA1NDQ2NDYyMjkxODQ3NjI0NjM4NjUxNTYxZGZnMTU2MTQ4ZGY5NDE4MTk0OTg=");