Firewase JWT-токен можно использовать повторно для того же пользователя, пока не истечет срок действия токена

Я попытался создать аутентификацию токена JWT API, используя ссылку
https://www.sitepoint.com/php-authorization-jwt-json-web-tokens/

Все работает отлично, но я сталкиваюсь с одной проблемой, то есть токен можно использовать повторно, пока не истечет срок его действия. Я проверил это по следующему сценарию

Создайте токен1 (токен jwt), используя имя пользователя и пароль. Время истечения 30 минут
Создайте другой токен из другого браузера или почтальона, т.е. token2 (токен JWT) через 10 минут после создания первого токена1 (использовались те же имя пользователя и пароль, что и токен1)

Проблема в том, что я могу использовать token1 и token2 для доступа к защищенному URL. Что мне нужно, так это то, что token1 нужно истечь (т.е. предыдущий токен для того же пользователя), если я вхожу с теми же данными пользователя.

Я полагаю, что токен нигде не сохранен, так как можно истечь действительный предыдущий токен для того же пользователя, если я попытался войти в систему.

Конечная точка аутентификации www.mysite.com/api/login.php

По коду успеха

$tokenId    = base64_encode(openssl_random_pseudo_bytes(32));
$issuedAt   = time();
$notBefore  = $issuedAt -1;
$expire     = $notBefore + 1500;
$serverName = $config->get('serverName');

$data = array(
'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' => array(                  // Data related to the signer user
'userId'   => $uid, // userid from the users table
'userName' => $username, // User name
)
);

header('Content-type: application/json');
$secretKey = base64_decode($config->get('jwt')->get('key'));
$algorithm = $config->get('jwt')->get('algorithm');

$jwt = JWT::encode(
$data,      //Data to be encoded in the JWT
$secretKey, // The signing key
$algorithm  // Algorithm used to sign the token, see https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40#section-3
);

$unencodedArray = array('jwt' => $jwt,"success"=>true);

На каждом безопасном URL

list($jwt) = sscanf( $authHeader->toString(), 'Authorization: Baerer %s');

if ($jwt) {
try {


$config = Factory::fromFile('config/config.php', true);

$secretKey = base64_decode($config->get('jwt')->get('key'));

$token = JWT::decode($jwt, $secretKey, array('HS512'));

$asset = "test";

$response['success'] = true;


$sth = $db->prepare("SELECT * from users");
$sth->execute();
$datas = $sth->fetchAll(PDO::FETCH_ASSOC);


$response['datas']    = $datas;



header('Content-type: application/json');
echo json_encode($response);

} catch (Exception $e) {
//$response['success'] = false;
$response['message'] =  "Warning Expired Auth: ".$e->getMessage();
echo json_encode($response);
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]