在Java中创建JWT,热到在Node中验证?
如何使用Node.js验证使用JJWT()在Java中创建的JWT?如果我们像下面那样创建JWT并打印出值:在Java中创建JWT,热到在Node中验证?,java,node.js,jwt,Java,Node.js,Jwt,如何使用Node.js验证使用JJWT()在Java中创建的JWT?如果我们像下面那样创建JWT并打印出值: byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("something"); Key key = new SecretKeySpec(apiKeySecretBytes, SignatureAlgorithm.HS512.getJcaName()); JwtBuilder builder = Jwts.buil
byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("something");
Key key = new SecretKeySpec(apiKeySecretBytes, SignatureAlgorithm.HS512.getJcaName());
JwtBuilder builder = Jwts.builder()
.setSubject(subject)
.signWith(SignatureAlgorithm.HS512, key);
System.put.println(builder.compact());
尝试将Node.js结果中打印出来的字符串解码为无效签名错误:
var nJwt = require('jsonwebtoken');
var token = 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJKb2UifQ.dqJqRrJ1zDlNq79RAJqhbqme23Fq_Fh9M4MufE5AT8A7-c2yo3OgG71RMSsUxloceG0WaYwhz3WIprcdZsYY_Q',
secretKey = 'something';
var verifiedJwt = nJwt.verify(token,secretKey);
console.log(verifiedJwt);
在上面的示例中,令牌值不正确,仅作为示例提供。使用JJWT时,您正在对字符串进行base64解码
something
,但在使用nJwt时,您没有这样做
字符串的字节和Base64解码同一字符串产生的字节是不同的字节数组。因此,您的两个代码示例实际上使用了不同的键
编辑:
此外,为了确保密钥完整性保证,您应该确保在使用HMAC-SHA算法时密钥等于或大于散列输出长度
对于SHA-256,输出长度为256位,SHA-384为384,SHA-512为512。这意味着最小密钥长度分别为32字节(32个ascii字符)、48字节和64字节。不建议使用something
作为HMAC-SHA-512的密钥(9字节)
这就是JJWT提供便利密钥生成器以确保最佳实践的原因:
byte[] hmacSha512Key = MacProvider.generateKey().getEncoded();
byte[] hmacSha384Key = MacProvider.generateKey(SignatureAlgorithm.HS384).getEncoded();
byte[] hmacSha256Key = MacProvider.generateKey(SignatureAlgorithm.HS256).getEncoded();
嗯 如何验证,糟糕的屏幕分辨率…您的意思是要求
njwt
或jsonwebtoken
?另外,请提供jjwt正在生产的实际令牌-这将帮助我们调试:)您能检查下面的答案吗?