Я использую библиотеку Android ‘io.jsonwebtoken: jjwt: 0.7.0’ для создания токена, который правильно создает JWT, который я проверил. Моя проблема, когда я использую библиотеку php firebase / php-jwt для декодирования. обе библиотеки установлены на HS256 и клавиша «тестирование». Что я здесь не так делаю?
String compactJws = Jwts.builder()
.claim("devId", getDeviceId())
.signWith(SignatureAlgorithm.HS256, "testing")
.compact();
logger.i(compactJws);
регистрируется как eyJhbGciOiJIUzI1NiJ9.eyJkZXZJZCI6Ijc4MGQ1YWRlMzMwNGVhZmEifQ.XIKxG1xZbuMD8FRIAJ735LNbhodAj1a7pMZ6o3IF0ig
use \Firebase\JWT\JWT;
$jwt = "eyJhbGciOiJIUzI1NiJ9.eyJkZXZJZCI6Ijc4MGQ1YWRlMzMwNGVhZmEifQ.XIKxG1xZbuMD8FRIAJ735LNbhodAj1a7pMZ6o3IF0ig";
$key = "testing";
$decoded = JWT::decode($jwt, $key, array('HS256'));
print_r($decoded);
возвращает Uncaught исключение «Firebase \ JWT \ SignatureInvalidException» с сообщением «Ошибка проверки подписи»
Ответ был: я пропустил заголовок «typ»: «JWT» и мне пришлось декодировать ключ
Map<String, Object> header = new HashMap<>();
header.put("typ", Header.JWT_TYPE);
.setHeader(header)
PHP SIDE
$decoded_array = (array) JWT::decode($jwt, base64_decode($key), array('HS256'));
Других решений пока нет …