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