JWTDecodeException(无效的JSON格式)

时间:2019-07-02 10:08:45

标签: java jwt auth0

我正在尝试使用com.auth0.jwt (3.8.1)来实现JSON Web Tokens,但是它没有按预期工作。 编码工作正常,但是如果我尝试验证编码的令牌,我总是会遇到错误:

  

com.auth0.jwt.exceptions.JWTDecodeException:字符串'{“ typ”:“ JWT”,“ alg”:“ HS256”}'没有有效的JSON格式

即使我在同一时间进行编码(请参见代码(function "verify")),也无法在编码和验证之间进行更改。

我忽略了什么吗?

这里有令牌:

  

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJUZXN0QXV0aCIsImlhdCI6MTU2MjA2MDg4MywiZW1haWwiOiJURVNJMpV1CRV7RU7C1B1C7B1C1B

package test.jwt;

import java.io.UnsupportedEncodingException;
import org.apache.commons.codec.binary.Base64;
import java.util.Date;

import com.auth0.jwt.*;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

public class TestJWT {
  final String SECRET = "sr4mkbbr4wdy45974s94l3squ0wtpf15";



  public String verify(String token) {
    try {
        token = this.encode();   //for testing      
        JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SECRET)).withIssuer("TestAuth").build();

        DecodedJWT jwt = verifier.verify(token);
        return jwt.getClaim("email").asString();
    } catch (Exception ex) {
        ex.printStackTrace();
        return null;
    }
  }

  public String encode() {
    try {

        return JWT.create().withIssuer("TestAuth").withIssuedAt(new Date()).withClaim("email", "TEST@TESTTEST.de").sign(getAlgorithm());
    } catch (Exception ex) {
        ex.printStackTrace();
        return null;
    }

  }

  private Algorithm getAlgorithm() throws UnsupportedEncodingException {
    return Algorithm.HMAC256(SECRET);
  }

}

1 个答案:

答案 0 :(得分:0)

您的令牌不是有效的JSON。
它需要在前面加上“ {”,并在后面加上“}”。 我添加了这些,并且解码正常。我不确定它是否可以解决您的所有问题,但它应该可以解决本文标题中的问题。

enter image description here