2017-01-15 5 views
1

Ich suche jetzt Stunden und kann keine Lösung für dieses Problem finden.PHP JWT Token Ungültige Signatur

Dies ist der Code zum Generieren des JWT-Tokens. Ich benutzte https://github.com/firebase/php-jwt Bibliothek.

 $tokenId = base64_encode(mcrypt_create_iv(32)); 
     $issuedAt = time(); 
     $notBefore = $issuedAt + 10;    //Adding 10 seconds 
     $expire  = $notBefore + 60;   // Adding 60 seconds 
     $serverName = 'serverName'; // Retrieve the server name from config file 

     $secretKey = base64_decode(getenv('JWT_SECRET')); 

     $data = [ 
      'iat' => $issuedAt,   // Issued at: time when the token was generated 
      'jti' => $tokenId,   // Json Token Id: an unique identifier for the token 
      'iss' => $serverName,  // Issuer 
      'nbf' => $notBefore,  // Not before 
      'exp' => $expire,   // Expire 
      'data' => [     // Data related to the signer user 
       'userId' => '1', // userid from the users table 
       'userName' => $UserName, // User name 
      ] 
     ]; 

     $jwt = JWT::encode(
       $data,  //Data to be encoded in the JWT 
       $secretKey, // The signing key 
       'HS256'  // Algorithm used to sign the token 
     ); 

     $unencodedArray = ['jwt' => $jwt]; 
     echo json_encode($unencodedArray); 

Und ich das Token bei https://jwt.io/ überprüfen

enter image description here

mir jemand bei diesem Problem helfen? Ich bin gerade neu in JWT. Übrigens, mein Projekt ist Slim API.

Vielen Dank.

+0

Ich schlage vor, dass Sie '$ notBefore = $ emitedAt + 10;' zu '$ notBefore = $ exitedAt + 0;'! –

Antwort

4

Die Überprüfung der Signatur schlägt fehl, weil Sie den korrekten geheimen Schlüssel nicht an https://jwt.io/ übergeben. Sie müssen den Wert $secretKey aus dem PHP-Code übergeben. Gemäß dem Screenshot übergeben Sie die Zeichenfolge secret.

+0

Danke, mein Herr. Ich habe nicht bemerkt, dass ich das "geheime" Keyword unter https://jwt.io/ ändern muss – Joseph