为什么 JWT::d ecode() 返回 { "status" : "" kid\ " empty, unable to lookup correct key" }



我的第一个堆栈溢出问题-开始吧!

我已经编码了一个Firebase JWT令牌来验证我的PHP Slim API中的"买方"。它正确编码并在Postman中生成JWT令牌,

邮差JWT编码

但是当我尝试使用JWT承载身份验证访问我的routes.php文件中的一组受保护的路由时,我收到:

{ "status": ""kid" empty, unable to lookup correct key" }

这是我的generateJWT()函数:-在Buyer.php类。

{
$buyer = $buyer =  self::findOrFail($id);
if (!$buyer) {
return false;
}
$key = self::JWT_KEY;
$expiration = time() + self::JWT_EXPIRE;
$issuer = 'Lab03_I425.com';
$token = [
'iss' => $issuer,
'exp' => $expiration,
'isa' => time(),
'data' => [
'uid' => $id,
'name' => $buyer->username,
'email' => $buyer->email] ];
return JWT::encode (
$token,
$key,
'HS256',
);
}

这是我的validateJWT()函数:- - - -在买方。php类

public static function validateJWT($token)
{
return JWT::decode($token, self::JWT_KEY,  array('HS256') );
}

我知道有一个JWT参数$kid存在于$payload, $key, $ algams之外,但我的印象是没有必要完成身份验证。我刚开始使用Slim, Tokens和Web服务,所以任何帮助都会非常感激。

这是我的BuyerController.php中的authJWT方法,在routes.php中调用:

public function authJWT(Request $request, Response $response)
{
$params = $request->getParsedBody();
$username = $params['username'];
$password = $params['user_password'];
$authBuyer = Buyer::authenticateBuyer($username, $password);
if ($authBuyer) {
$status_code = 200;
$jwt = Buyer::generateJWT($authBuyer->id);
$results = [
'status' => 'login successful',
'jwt' => $jwt,
'name' => $authBuyer->username
];
} else {
$status_code = 401;
$results = [
'status' => 'login failed',
];
}
//return $results;
return $response->withJson($results, $status_code,
JSON_PRETTY_PRINT);
}

我查看了- - - - - vendorfirebasephp-jwtsrcJWT.php - - - -文件并注意到

if (empty($kid)) {
throw new UnexpectedValueException('"kid" empty, unable to lookup correct key');
}

如果我理解正确,这个值可以是字符串或null,显然我的是空的(0长度的字符串),如果它返回上述的expectedvalueexception()。

为什么会这样?我该如何改变这一点,使JWT中间件允许我访问分组路由?

提前感谢您的反馈和指导。

我遇到了同样的问题,但是在阅读github for firebase包时,我看到他们改变了解码过程。

现在您需要创建Key类的实例,并在调用decode方法时使用它,如:

use FirebaseJWTJWT;
use FirebaseJWTKey;
$data = JWT::decode($token, new Key($topSecret, 'HS256'));

使用这种方式解决了我的问题,解码现在正在工作。该软件包的版本为6.2.0。检查是否使用该版本或更高版本。

相关内容

  • 没有找到相关文章

最新更新