我正在尝试使用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);
}
}