как видно из заголовка, я спрашиваю, являются ли JWT хорошим дополнением, или они не нужны или лучше не используются в этом случае.Я уже прочитал много информации и до сих пор не могу прийти с полным ответом.
Я принимаю во внимание следующее:
- Безопасность.
- Скорость / Время отклика / Производительность.
- Ресурсы, используемые на сервере (ЦП, ОЗУ и т. Д.).
- Отключенный мультилогин (не более 1 клиента на учетную запись).
Моя ситуация на стороне клиента:
- Настольное приложение, написанное на C ++, которое требует постоянного подключения к Интернету.
- 1Время входа в систему при открытии приложения, а затем запрос каждые X секунд, сообщающий серверу, что пользователь все еще использует приложение(поскольку приложение может аварийно завершить работу, и сервер не будет знать, что пользователь больше не использует приложение).
- Браузер НИКОГДА не используется.
Моя ситуация Сервер-Side:
- Облачный хостинг с ограниченными ресурсами.
- API входа, который обрабатывает аутентификацию.(PHP и MySQL)
- Проверка API, который обрабатывает эти запросы каждые X секунд.(PHP и MySQL)
- Около 50-70 пользователей.
Как я это делаю прямо сейчас:
- Первое: пользователь входит в систему, токен создается с помощью random_bytes (), сохраняется в БД и отправляется клиенту.(проверьте код ниже)
- Второе: клиент отправляет пользователя, pw и токен каждые X секунд.
- Третье: сервер проверяет, что токен действителен для этого пользователя, и позволяет пользователю продолжать использоватьприложение до следующей проверки.
- Четвертое: после x + 5 секунд отсутствия запросов от пользователя, токен истекает.
Для «первого» и «второго» I 'm использую:
<?php
.
.
.
$token = bin2hex(random_bytes(32));
$stmt = $con->prepare("UPDATE accounts_table SET loggedin = 1, token = ? WHERE Username = ?");
$stmt->bind_param('ss', $token, $username);
$stmt->execute();
echo $token;
?>
Для «третьего» я использую:
<?php
.
.
.
$stmt = $con->prepare("SELECT * FROM accounts_table WHERE username= ? LIMIT 1");
$stmt->bind_param('s', $user);
$stmt->execute();
$result = $stmt->get_result();
$result = $result->fetch_array();
if ($token==$result['token'])
{in pseudo-code} tell the client that everything is ok
else
{in pseudo-code} tell the client that he is not allowed to use the app anymore.
?>
О вещах, которые я писал ранее.
- Безопасность
Из того, что я прочитал из множества ответов в StackExchange и StackOverflow, JWT безопасны, пока закрытый ключ не украден.Если я что-то пропустил, скажите, пожалуйста.
Скорость / Время отклика / Производительность и 3. Ресурсы, используемые на сервере (ЦП, ОЗУ и т. Д.)
Из того, что я читал в статьях о JWT (как, например, этот: Почему jwts сосут как токены сеанса ), они будут увеличивать размер запросов, а также увеличивать ресурсы (ЦП, ОЗУ и т. Д.), Необходимые для каждого запроса, поскольку он должен вычислять хэши.Кроме того, я читал об HTTP / 2 hpack функцию тихого убийцы http , которая показывает, что увеличенный размер не имеет значения из-за сжатия.
Но все же меня беспокоитувеличится ли использование ресурсов, будет ли ощутимое влияние на производительность?Я должен спросить это, потому что я не знаю, как воспроизвести ситуацию, когда 50 пользователей одновременно используют приложение.
Отключено multilogin (не более 1 клиента на одну учетную запись).
Поскольку вход в систему проверяет, не вошел ли пользователь, используя флаг «loggedin», он не разрешит multilogin.Если вы нашли ошибку, пожалуйста, сообщите мне.
Дополнительно: Есть ли лучший подход?
Я также читал о сессиях, но нужен ли он?Это улучшит мою ситуацию или будет таким же?
Заранее спасибо.