Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解码时jwt签名异常_Jwt - Fatal编程技术网

解码时jwt签名异常

解码时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

在为Spring Rest服务添加安全性时,我面临签名异常。请帮忙

io.jsonwebtoken.SignatureException:JWT签名与本地计算的签名不匹配。无法断言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.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中的插件)获取承载令牌时,下一行将作为额外的空间出现。