PHP JWT 令牌无效签名

Posted

技术标签:

【中文标题】PHP JWT 令牌无效签名【英文标题】:PHP JWT Token Invalid Signature 【发布时间】:2017-05-30 06:16:57 【问题描述】:

我现在正在搜索一个小时,但找不到解决此问题的方法。

这是生成 JWT 令牌的代码。我使用了https://github.com/firebase/php-jwt 库。

        $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);

我在https://jwt.io/验证令牌

谁能帮我解决这个问题?我目前是 JWT 的新手。顺便说一句,我的项目是 Slim API。

非常感谢。

【问题讨论】:

我建议你把$notBefore = $issuedAt + 10;改成$notBefore = $issuedAt + 0; 【参考方案1】:

签名验证失败,因为您没有将正确的密钥传递给 https://jwt.io/ 您需要从 PHP 代码中传递 $secretKey 的值。根据屏幕截图,您正在传递字符串secret

【讨论】:

谢谢先生。我没有注意到我需要在jwt.io 处更改“秘密”关键字

以上是关于PHP JWT 令牌无效签名的主要内容,如果未能解决你的问题,请参考以下文章

使用刷新令牌时 Spring Boot JWT 令牌无效签名

为啥我的来自 Amazon Cognito 的 JWT 令牌具有无效签名?

JWT 令牌的签名无效 - Azure + Spring Boot

使用 jsonwebtoken 库生成的 JWT 令牌在 jwt.io 中提供了无效签名

使用 JWT 在 c# 中生成令牌的无效签名

即使我在授权中输入令牌,JWT 仍返回无效签名错误