PHP JWT — возвращает null через некоторое время

#php #jwt #jwt-auth #php-jwt

#php #jwt #php-jwt

Вопрос:

Я попытался внедрить JWT в свой код для аутентификации. И, похоже, какое-то время он работает нормально, а затем завершается сбоем и возвращает null. И я не могу понять, что возвращает значение null.

Включены файлы JWT

 include_once("includes/jwt/BeforeValidException.php");
include_once("includes/jwt/ExpiredException.php");
include_once("includes/jwt/JWK.php");
include_once("includes/jwt/JWT.php");
include_once("includes/jwt/SignatureInvalidException.php");
  

Заголовки

 header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
  

Получение данных

 $data = (object) json_decode(file_get_contents("php://input"));
  

Функции для получения JWT из заголовка

 function getAuthorizationHeader() {
        $headers = null;
        if (isset($_SERVER['Authorization'])) {
            $headers = trim($_SERVER["Authorization"]);
        }
        else if (isset($_SERVER['HTTP_AUTHORIZATION'])) { //Nginx or fast CGI
            $headers = trim($_SERVER["HTTP_AUTHORIZATION"]);
        } elseif (function_exists('apache_request_headers')) {
            $requestHeaders = apache_request_headers();
            $requestHeaders = array_combine(array_map('ucwords', array_keys($requestHeaders)), array_values($requestHeaders));
            if (isset($requestHeaders['Authorization'])) {
                $headers = trim($requestHeaders['Authorization']);
            }
        }
        return $headers;
    }
function getBearerToken() {
    global $message;
    $headers = getAuthorizationHeader();
    $message .= $headers;
    if (!empty($headers)) {
        if (preg_match('/Bearers(S )/', $headers, $matches)) {
            return $matches[1];
        }
    }
    return null;
}
$jwt = getBearerToken();
  

Код

 if ($jwt) {
   try {
      echo json_encode(array("message" => "all good"));
   } catch (Exception $e) {
      echo json_encode(array("message" => "token-error"));
   }
} else {
  echo json_encode(array("message" => "no jwt"));
}
  

Он продолжает говорить все хорошо в течение нескольких минут. И внезапно он возвращает null. Не уверен, что мне нужно захватить, чтобы узнать, что вернуло это значение null.

Создание JWT

 $issuedat_claim = time(); // issued at
$notbefore_claim = $issuedat_claim; //not before in seconds
$expire_claim = $issuedat_claim   3600; // expire time in seconds
$token = array(
    "iss" => $issuer_claim,
    "aud" => $audience_claim,
    "iat" => $issuedat_claim,
    "nbf" => $notbefore_claim,
    "exp" => $expire_claim,
    "data" => array(
        "email" => $email
));
$jwt = JWT::encode($token, $secret_key);
echo json_encode(
    array(
        "status" => "ok",
        "jwt" => $jwt,
        "email" => $email,
        "expireAt" => $expire_claim,
        "firstname" => $firstname,
        "lastname" => $lastname,
        "userlevel" => $userlevel
    )
);
  

Для отладки я перешел на вкладку Сеть, чтобы посмотреть, что отправляется и отсутствует ли токен JWT. И оно есть. Я не уверен, что по какой-то причине срок действия логина JWT истекает через 5 минут, я не знаю, но даже если срок действия токена истек, он должен перейти в область catch. Я был бы очень признателен, если бы кто-нибудь мог пролить свет на то, что я делаю неправильно. Спасибо.