java 签名指定编码_java.lang.IllegalArgumentException:如果指定的JWT经过数字签名,则必须指定签名密钥...

我正在寻求在我的应用程序中实现JWT,因为我正在通过参考https://stormpath.com/blog/jwt-java-create-verify进行一些R& D的研究。当我尝试通过提取声明集来尝试verifyToken()时,我成功地实现了generateToken()方法。我不明白apiKey.getSecret()是从哪里来的。你能指导我吗?

以下代码供参考:

public class JJWTDemo {

private static final String secret = "MySecrete";

private static String generateToken(){

String id = UUID.randomUUID().toString().replace("-", "");

Date now = new Date();

Date exp = new Date(System.currentTimeMillis() + (1000*30)); // 30 seconds

String token = Jwts.builder()

.setId(id)

.setIssuedAt(now)

.setNotBefore(now)

.setExpiration(exp)

.signWith(SignatureAlgorithm.HS256, secret)

.compact();

return token;

}

private static void verifyToken(String token){

Claims claims = Jwts.parser().

setSigningKey(DatatypeConverter.parseBase64Binary(apiKey.getSecret()))

.parseClaimsJws(token).getBody();

System.out.println("----------------------------");

System.out.println("ID: " + claims.getId());

System.out.println("Subject: " + claims.getSubject());

System.out.println("Issuer: " + claims.getIssuer());

System.out.println("Expiration: " + claims.getExpiration());

}

public static void main(String[] args) {

System.out.println(generateToken());

String token = generateToken();

verifyToken(token);

}

}我看到下面的错误即将到来:

eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI4N2E5NmYwNTcyN2M0ZDY0YjZmODlhNDAyOTQ2OTZiNyIsImlhdCI6MTQ4NDQ4NjYyNiwibmJmIjoxNDg0NDg2NjI2LCJleHAiOjE0ODQ0ODY2NTZ9.ycS7nLWnPpe28DM7CcQYBswOmMUhBd3wQwfZ9C-yQYs

Exception in thread "main" java.lang.IllegalArgumentException: A signing key must be specified if the specified JWT is digitally signed.

at io.jsonwebtoken.lang.Assert.notNull(Assert.java:85)

at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:331)

at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:481)

at io.jsonwebtoken.impl.DefaultJwtParser.parseClaimsJws(DefaultJwtParser.java:541)

at io.jsonwebtoken.jjwtfun.service.JJWTDemo.verifyToken(JJWTDemo.java:31)

at io.jsonwebtoken.jjwtfun.service.JJWTDemo.main(JJWTDemo.java:41)Maven依赖:

io.jsonwebtoken

jjwt

${jjwt.version}

0.7.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值