PHP JWT:: **解码** 过期令牌
Posted
技术标签:
【中文标题】PHP JWT:: **解码** 过期令牌【英文标题】:PHP JWT:: **Decode** expired Token 【发布时间】:2020-07-25 12:06:32 【问题描述】:我使用 JWT(Json Web 令牌),它在有效负载中具有刷新令牌 (GUID)。一般来说,我使用 Firebase JWT 来创建/编码和解码 JWT。
我想在 php 中解码过期的 JWT,然后使用其有效负载中的刷新令牌来创建新的 JWT(只要刷新令牌仍然有效)。如果我使用 Firebase 解码 JWT,它会引发异常(过期)并且不会返回解码后的令牌。
如何安全地解码过期的 JWT 并访问其有效负载?我可以捕获过期的异常还是不安全,它也可能捕获其他错误。如果我这样做了,我如何访问有效载荷? 感谢您的帮助和意见。
【问题讨论】:
【参考方案1】:这是我的解决方案:
-
使用 Firebase 解码尝试并捕获
捕获过期令牌的异常
在此 catch 中,使用 base64 解码令牌以获取刷新令牌
仅当令牌有效且过期时,它才会使用正常的 base64 解码(因此不检查签名)。但是签名检查是在步骤 1 中的解码之前完成的。
这里是它的伪代码:
$jwt = getBearerToken();
try
$decoded = JWT::decode($jwt, $key, array('HS256'));
$refresh_token=$decoded->data->refresh_token;
catch (Exception $e)
if($e->getMessage() == "Expired token")
list($header, $payload, $signature) = explode(".", $jwt);
$payload = json_decode(base64_decode($payload));
$refresh_token = $payload->data->refresh_token;
else
// set response code
http_response_code(401);
// show error message
echo json_encode(array(
"message" => "Access denied.",
"error" => $e->getMessage()
));
die();
【讨论】:
以上是关于PHP JWT:: **解码** 过期令牌的主要内容,如果未能解决你的问题,请参考以下文章