Проблема истечения срока действия PHP JWT

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

#php #jwt #php-jwt

Вопрос:

Я новичок в JWT, поэтому заранее приношу извинения.

Я использую библиотеку php-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("Access-Control-Request-Headers: GET,POST,OPTIONS,DELETE,PUT");
header('Access-Control-Allow-Headers: Authorization, Accept,Accept-Language,Content-Language,Content-Type');
  

Я генерирую токен, используя следующее:

 $secret_key = "***";
$issuer_claim = "***";
$audience_claim = "***";
$issuedat_claim = time(); // issued at
$notbefore_claim = $issuedat_claim; //not useable before in seconds
$expire_claim = time()   (60*60); // expire time in seconds
$token = array(
    "iss" => $issuer_claim,
    "aud" => $audience_claim,
    "iat" => $issuedat_claim,
    "nbf" => $notbefore_claim,
    "exp" => $expire_claim,
);
$jwt = JWT::encode($token, $secret_key);
  

Однако, когда я декодирую сгенерированный токен с помощью инструмента на jwt.io , это показывает, что токен истекает через 5 минут.

 {
  "iss": "***",
  "aud": "***",
  "iat": 1600925201,
  "nbf": 1600925201,
  "exp": 1600925501
}
  

Не могли бы вы подсказать мне, как увеличить время истечения срока действия? Несмотря на то, что в полезной нагрузке я указал 60 минут, но токен действителен только в течение 5 минут.

Во-вторых, я хотел знать, как я могу сохранить токен для активного пользователя. Например, для пользователя, который остается неактивным в течение 60 минут, токен должен истечь. Но пользователь, который использует веб-сайт / веб-приложение, не должен выходить из системы, потому что он может быть чем-то занят, и внезапный выход из системы нарушит поток. Я читал о токене обновления в этом отношении, и если вы считаете, что это правильный подход, я был бы признателен, если бы вы могли поделиться каким-нибудь руководством по этому вопросу, потому что я не нашел ни одного, который мог бы дать хорошее представление о том, как выполнить.

Заранее спасибо.

Комментарии:

1. Я попробовал ваш фрагмент кода на sandbox.onlinephpfunctions.com/code /… и получил iat => 1600930608 nbf => 1600930608 exp => 1600934208 -> exp ровно через 3600 секунд после iat. Какая бы проблема у вас ни была, ее нельзя найти в коде, показанном в вашем вопросе.

2. @jps Я обновил вопрос. Пожалуйста, обратите внимание, что в вашей изолированной среде вы не расшифровали токен jwt и не просмотрели значения. Вы просто повторили $expire_claim .

3. конечно, я только повторил претензии, потому что это вся информация, которую вы предоставили ранее.

4. Не могли бы вы, пожалуйста, проверить, совпадает ли время вашего сервера с «реальным» текущим временем?

5. @AITMANSOURMohamed да, только что проверил и подтвердил, что время сервера совпадает с «реальным» текущим временем.