JWT (JSON Web Token) в PHP без использования сторонней библиотеки. Как подписать?

существует несколько библиотек для реализации веб-токенов JSON (JWT) в PHP, таких как php-jwt. Я пишу мой собственный, очень маленький и простой класс, но не могу понять, почему моя подпись не проходит проверку здесь несмотря на то, что я пытался придерживаться стандарта. Я пытаюсь уже несколько часов и застряла. Пожалуйста, помогите!

мой код-это просто

//build the headers
$headers = ['alg'=>'HS256','typ'=>'JWT'];
$headers_encoded = base64url_encode(json_encode($headers));

//build the payload
$payload = ['sub'=>'1234567890','name'=>'John Doe', 'admin'=>true];
$payload_encoded = base64url_encode(json_encode($payload));

//build the signature
$key = 'secret';
$signature = hash_hmac('SHA256',"$headers_encoded.$payload_encoded",$key);

//build and return the token
$token = "$headers_encoded.$payload_encoded.$signature";
echo $token;

на base64url_encode функция:

function base64url_encode($data) {
    return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}

мои заголовки и полезная нагрузка отлично матч сайт проверки по умолчанию JWT, но моя подпись не совпадает, поэтому мой токен помечен как недопустимый. Этот стандарт кажется очень простым, так что не так с моей подписью?

1 ответов


Я решил его! Я не понял, что сама подпись должна быть закодирована в base64. Кроме того, мне нужно было установить последний необязательный параметр