Я пытаюсь использовать com.auth0.jwt (3.8.1)
для реализации JSON Web Tokens
, но это не сработало, как ожидалось.
Кодировка работает нормально, но если я пытаюсь проверить закодированный токен, я всегда получаю сообщение об ошибке:
com.auth0.jwt.exceptions.JWTDecodeException: строка '{"typ": "JWT", "alg": "HS256"}' не имеет допустимого формата JSON
даже когда я кодирую в тот же момент (см. Код (function "verify")
), поэтому его нельзя изменить между кодированием и проверкой.
Я что-то пропускаю?
Вот токен:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJUZXN0QXV0aCIsImlhdCI6MTU2MjA2MDg4MywiZW1haWwiOiJURVNUQFRFU1RURVNULmRlIn0.A1dSRHLbevqC2lXSJ73kaaiMp7CD_MJCrs9vLBMGvng
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);
}
}