【发布时间】:2018-04-19 23:03:46
【问题描述】:
我在向 Spring Rest 服务添加安全性时遇到签名异常。请帮忙。
io.jsonwebtoken.SignatureException:JWT 签名与本地计算的签名不匹配。 JWT 有效性不能被断言,也不应该被信任。 在 io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:354)
//制作令牌
String token = Jwts.builder()
.setSubject(((User) auth.getPrincipal()).getUsername())
.signWith(SignatureAlgorithm.HS512, SECRET.getBytes("UTF-8"))
.compact();
res.addHeader(HEADER_STRING, TOKEN_PREFIX + token);
// 解码令牌
String token = request.getHeader(HEADER_STRING);
if (token != null) {
// parse the token.
String jwt = token.replace(TOKEN_PREFIX, "");
try {
Claims claims = Jwts.parser()
.setSigningKey(SECRET.getBytes("UTF-8"))
.parseClaimsJws(jwt)
.getBody();
if (claims.getSubject() != null) {
return new UsernamePasswordAuthenticationToken(claims.getSubject(), null, getAuthorities());
}
}
当我打印两者时,我得到以下文本。一是有额外的空间。仅当我使用 Rest 客户端访问服务时才会发生这种情况。测试类工作正常。
makeToken=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJza3AifQ.XUEsUFF3qm6fOeCG8xDLuRWjyd4kOh4g01olU_BsRyfqyI66MRhqmK-mxrAWSD17Ylmj-fZRRZUTRqxCQixxXQ
解码令牌= eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJza3AifQ.XUEsUFF3qm6fOeCG8xDLuRWjyd4kOh4g01olU_BsRyfqyI66MRhqmK-mxrAWSD17Ylmj-fZRR ZUTRqxCQixxXQ
【问题讨论】:
-
查看客户端代码以删除标头中的多余空间。服务器代码似乎没问题
-
我发现了这个问题,在从 Rest Client(Mozilla 中的插件)获取 Bearer 令牌时,下一行是一个额外的空间。
标签: jwt