JWT (JSON Web Token) in PHP ohne Verwendung einer Drittanbieter-Bibliothek. Wie unterschreiben?
Es gibt einige Bibliotheken für die Implementierung von JSON-Web-Tokens (JWT) in PHP, z. B. php-jwt. Ich schreibe meine eigene, sehr kleine und einfache Klasse, kann aber nicht herausfinden, warum meine Signatur nicht validiert werden kannHie obwohl ich versucht habe mich an den standard zu halten. Ich habe es stundenlang versucht und stecke fest. Bitte helfen Sie!
Mein Code ist einfach
//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;
Dasbase64url_encode
Funktion:
function base64url_encode($data) {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
Meine Header und Nutzdaten passen perfekt zumvalidation site's default JWT, aber meine Signatur stimmt nicht überein, sodass mein Token als ungültig gekennzeichnet ist. Dieser Standard scheint wirklich unkompliziert zu sein. Was stimmt also nicht mit meiner Signatur?