Всем привет! Использую (пытаюсь) библиотеку
JWT. Просто взял пример из документации и запускаю... Все работает, но я не могу понять, для чего нужны некоторые параметры...
Код прокомментировал на каждой строке, где понимаю что-то и где не понимаю... Пните пожалуйста!
$signer = new Lcobucci\JWT\Signer\Hmac\Sha256();
/*====== Генерируем токен ======*/
$token = (new Lcobucci\JWT\Builder())
// Не понятно для чего это
->setIssuer('http://example.com') // Configures the issuer (iss claim)
// Не понятно для чего это
->setAudience('http://example.org') // Configures the audience (aud claim)
// Не понятно для чего это
->setId('4f1g23a12aa', true) // Configures the id (jti claim), replicating as a header item
// Не понятно для чего это
->setIssuedAt(time()) // Configures the time that the token was issue (iat claim)
// Время жизни токена
->setExpiration(time() + 3600)
// Данные, которые храним в ключе, чтобы потом использовать их после получения токена (ID)
->set('user_id', 1453535345)
->set('login', 'username')
// ключ токена, если совпадает при проверке, значит это наш токен либо же кто-то украл ключ и лепит их от нашего имени
->sign($signer, 'testing')
// Получает сгенерированный токен (объект в строке)
->getToken();
// $token - это и есть токен который нужно передать юзеру при успешной авторизации
// его же мы и будем получать при каждом обращении к сайту
// echo $token;
$token = (new Lcobucci\JWT\Parser())->parse((string) $token); // получили токен, скажем, из $_GET['token']
/*====== проверяем токен =======*/
$data = new Lcobucci\JWT\ValidationData(); // Он будет использовать текущее время для проверки (iat, nbf и exp)
// Эти параметры должны совпадать с теми, которые генерируются вместе с токеном
// Но для чего? Ведь если токен может расшифровать любой, у кого он есть, он также сможет вставлять эти данные в собственные токены
$data->setIssuer('http://example.com');
$data->setAudience('http://example.org');
$data->setId('4f1g23a12aa');
var_dump($token->validate($data)); // проверка токена по времни
var_dump($token->verify($signer, 'testing')); // проверка токена по ключу, если не совпадает - значит не мы создавали токен и данные могут быть липовыми
т.е. проблема, по сути, в большинстве, вот в этих строках:
->setIssuer('http://example.com') // Configures the issuer (iss claim)
->setAudience('http://example.org') // Configures the audience (aud claim)
->setId('4f1g23a12aa', true) // Configures the id (jti claim), replicating as a header item
->setIssuedAt(time())
Просто, на сколько я понимаю, в них нет смысла...
Ведь проще было бы с помощью ключа зашифровать все данные в токене, чтобы никто не смог расшифровать буквально ничего. Тогда проверки на то, кто издал этот токен, также не потребовались...