解码时jwt签名异常
在为Spring Rest服务添加安全性时,我面临签名异常。请帮忙 io.jsonwebtoken.SignatureException:JWT签名与本地计算的签名不匹配。无法断言JWT有效性,不应信任JWT有效性。 位于io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:354) //代币解码时jwt签名异常,jwt,Jwt,在为Spring Rest服务添加安全性时,我面临签名异常。请帮忙 io.jsonwebtoken.SignatureException:JWT签名与本地计算的签名不匹配。无法断言JWT有效性,不应信任JWT有效性。 位于io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:354) //代币 String token = Jwts.builder() .setSubject(((User) auth.getPrinc
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.EYJZWIOIJZA3IFQ.XUEsUFF3qm6fOeCG8xDLuRWjyd4kOh4g01olU\BsRyfqyI66MRhqmK-mxrAWsD17Ylmj-FZRRZUTRQXQIXXXQ
解码令牌=
eyJhbGciOiJIUzUxMiJ9.EYJZDWIOIJZA3IFQ.XUEsUFF3qm6fOeCG8xDLuRWjyd4kOh4g01olU BsRyfqyI66MRhqmK-mxrAWsD17Ylmj-fZRR ZUTRqxCQixxXQ如果有人在解码JWT令牌时面临同样的问题,那就太晚了,但值得了 图书馆GitHub链接: 实施:
implementation ('com.auth0.android:jwtdecode:1.2.0'){
exclude group: 'com.android.support', module: 'appcompat-v7'
}
// token: eyJ0eXAiOiJKV1QiLCJhbxxxxxxx9.eyJpZC*********************UEFUSUVOVCIsImV4cCI6MTU2NTY5MzU5MCwib3JpZ0lhdCI6MTU2NTA4ODc5MH0.ZhPpZSFZL6EY-Mwrw0F*********MYmbw
private void getExpDate(String token) {
JWT jwt = new JWT(token);
Log.e(TAG,"Claim - id:"+jwt.getClaim("id").asString()+" - username:"+jwt.getClaim("username").asString()+" - role:"+jwt.getClaim("role").asString()+" - exp:"+jwt.getClaim("exp").asString());
}
E/PatientLogin: Claim - id:cd5dbe61-xxxx-xxxx-xxxx-xxxxxx - username:xxxx@gmail.com - role:PATIENT - exp:1565693590
代码:
implementation ('com.auth0.android:jwtdecode:1.2.0'){
exclude group: 'com.android.support', module: 'appcompat-v7'
}
// token: eyJ0eXAiOiJKV1QiLCJhbxxxxxxx9.eyJpZC*********************UEFUSUVOVCIsImV4cCI6MTU2NTY5MzU5MCwib3JpZ0lhdCI6MTU2NTA4ODc5MH0.ZhPpZSFZL6EY-Mwrw0F*********MYmbw
private void getExpDate(String token) {
JWT jwt = new JWT(token);
Log.e(TAG,"Claim - id:"+jwt.getClaim("id").asString()+" - username:"+jwt.getClaim("username").asString()+" - role:"+jwt.getClaim("role").asString()+" - exp:"+jwt.getClaim("exp").asString());
}
E/PatientLogin: Claim - id:cd5dbe61-xxxx-xxxx-xxxx-xxxxxx - username:xxxx@gmail.com - role:PATIENT - exp:1565693590
Logcat结果:
implementation ('com.auth0.android:jwtdecode:1.2.0'){
exclude group: 'com.android.support', module: 'appcompat-v7'
}
// token: eyJ0eXAiOiJKV1QiLCJhbxxxxxxx9.eyJpZC*********************UEFUSUVOVCIsImV4cCI6MTU2NTY5MzU5MCwib3JpZ0lhdCI6MTU2NTA4ODc5MH0.ZhPpZSFZL6EY-Mwrw0F*********MYmbw
private void getExpDate(String token) {
JWT jwt = new JWT(token);
Log.e(TAG,"Claim - id:"+jwt.getClaim("id").asString()+" - username:"+jwt.getClaim("username").asString()+" - role:"+jwt.getClaim("role").asString()+" - exp:"+jwt.getClaim("exp").asString());
}
E/PatientLogin: Claim - id:cd5dbe61-xxxx-xxxx-xxxx-xxxxxx - username:xxxx@gmail.com - role:PATIENT - exp:1565693590
测试JWT令牌:
如果您想检查JWT令牌,请使用下面的链接
或
这里有另一种方法,可能也适用于您。这将有助于避免使用第三方库
参考:
查看客户端代码以从标头中删除额外的空间。服务器代码似乎okI发现了这个问题,当从Rest客户端(Mozilla中的插件)获取承载令牌时,下一行将作为额外的空间出现。