在node.js中生成的JWT(JSON Web令牌)未在java中验证

时间:2016-07-21 09:42:17

标签: java node.js rsa jwt digital-signature

我使用带有require('jsonwebtoken')的Node.js生成JWT,使用由Windows中的puttygen工具生成的公钥。然后我将该标记传递给标题中的其他应用程序。其他应用程序不是在Node.js中开发的。使用java我需要使用公钥验证令牌。但是没有一个网站我找到了一个有效的样本来验证使用公钥/私钥。

任何人都可以提供我如何在java中加载公钥/私钥并验证jwt令牌的步骤。如果有的话,请提供给我的例子。提前谢谢。

示例公钥(public.pem): -

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20160721"
AAAAB3NzaC1yc2EAAAABJQAAAQEAhk1i7Jwz2M6zakReDgg0NkVPn1kK1R8qAp2p
Ayh0eUPCb2XICDDVRnpUIK7/4k4dlLeeSi10TwwXe85zZ0gXcNMIOpnEKIWcnqJM
ctbYwyrl2tAb/tKjvBCvHMA9ZnfNADkN6reBZq8u7kYJ3bF9PxvS3QM+vgJ8/8ZS
qkRWcsmRZdq+wthwGt43J3NSKFfhMVP08/V/hTASq06vvFYApHsEH6zLxNNQ63Tt
Bzedh+C5efyqYqEVqnA7S9bXimyY2ViqpqFTx1lM9dV+12dSOxd7CQzX8eo00Phi
EAnY2hfoTooUeCO3/L6YavRl+CXgjhvA9mg4QO554qI1YCUvBw==
---- END SSH2 PUBLIC KEY ----

节点JS代码: -

var privateKey = fs.readFileSync("public.pem");
var userData = {username:'John'};
var token = jwt.sign(userData, privateKey);

Java代码: -

需要使用上述公钥验证上述令牌的java代码。

1 个答案:

答案 0 :(得分:0)

加密操作独立于编程语言。您可以在nodeJS中完美地生成JWT并在Java中进行验证。

使用私钥对JWT进行数字签名,并使用公钥验证签名。在HMAC对称密钥的情况下,签名和验证的关键是相同的。

https://github.com/jwtk/jjwt

一样使用Java的JWT库
 Jwts.parser().setSigningKey(key).parseClaimsJws(compactJws);

在页面中,您可以看到支持的算法。

Putty使用自己的密钥格式。 Java不支持它。您需要将Putty SSH2密钥导出为OpenSSH格式。看到 How can I read RSA keys in Java?