Будет ли JWTS снижать производительность и ничего не улучшит в этом случае? - PullRequest
1 голос
/ 08 мая 2019

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

Я принимаю во внимание следующее:

  1. Безопасность.
  2. Скорость / Время отклика / Производительность.
  3. Ресурсы, используемые на сервере (ЦП, ОЗУ и т. Д.).
  4. Отключенный мультилогин (не более 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.
?>

О вещах, которые я писал ранее.

  1. Безопасность

Из того, что я прочитал из множества ответов в StackExchange и StackOverflow, JWT безопасны, пока закрытый ключ не украден.Если я что-то пропустил, скажите, пожалуйста.

Скорость / Время отклика / Производительность и 3. Ресурсы, используемые на сервере (ЦП, ОЗУ и т. Д.)

Из того, что я читал в статьях о JWT (как, например, этот: Почему jwts сосут как токены сеанса ), они будут увеличивать размер запросов, а также увеличивать ресурсы (ЦП, ОЗУ и т. Д.), Необходимые для каждого запроса, поскольку он должен вычислять хэши.Кроме того, я читал об HTTP / 2 hpack функцию тихого убийцы http , которая показывает, что увеличенный размер не имеет значения из-за сжатия.

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

Отключено multilogin (не более 1 клиента на одну учетную запись).

Поскольку вход в систему проверяет, не вошел ли пользователь, используя флаг «loggedin», он не разрешит multilogin.Если вы нашли ошибку, пожалуйста, сообщите мне.

Дополнительно: Есть ли лучший подход?

Я также читал о сессиях, но нужен ли он?Это улучшит мою ситуацию или будет таким же?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...