在这种情况下,jwts会降低性能而不改善任何东西吗?

时间:2019-05-08 00:24:56

标签: php c++ mysql jwt

正如标题所说,我要问的是JWT是否是一个很好的补充,或者在这种情况下是否不需要或最好不要使用它们。我已经阅读了很多信息,但仍然无法给出完整的答案。

我正在考虑以下事项:

  1. 安全性。
  2. 速度/响应时间/性能。
  3. 服务器中使用的资源(CPU,RAM等)。
  4. 禁用多帐户登录(每个帐户最多不超过1个客户端)。

我的情况客户端:

  • 用C ++编写的桌面应用程序,需要持续的互联网连接。
  • 1打开应用程序时进行登录,然后每X秒发送一次请求,告知服务器用户仍在使用应用程序。 (因为该应用可能崩溃,并且服务器不知道用户不再使用该应用)。
  • 从不使用浏览器。

我的服务器端情况:

  • 低资源云托管。
  • 处理身份验证的登录API。 (PHP和MySQL)
  • 检查API,每隔X秒处理一次这些请求。 (PHP和MySQL)
  • 大约50-70个用户。

我现在的操作方式:

  • 首先:用户登录,使用random_bytes()创建一个令牌,将其存储在数据库中并发送给客户端。 (检查下面的代码)
  • 第二:客户端每X秒发送一次用户,密码和令牌。
  • 第三项:服务器检查该令牌对该用户有效,并允许该用户继续使用该应用程序,直到下一次检查为止。
  • 第四:在用户未请求x + 5秒后,令牌到期。

对于“第一”和“第二”,我使用:

<?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的许多答案中所读到的内容来看,只要私钥没有被盗,JWT都是安全的。如果有什么我想念的,请告诉我。

  1. 速度/响应时间/性能以及3.服务器中使用的资源(CPU,RAM等)

根据我在有关JWT的文章中所读的内容(例如Why jwts suck as session tokens),它们将增加请求的大小,并增加每个请求所需的资源(CPU,RAM等)请求,因为它必须计算哈希值。我还阅读了有关HTTP / 2 hpack the silent killer feature of http的内容,该内容表明,由于压缩,增加大小无关紧要。

但是我仍然担心资源使用的增加,性能影响是否可以察觉?我不得不问这个问题,因为我不知道一种方法可以同时使用该应用来重现50个用户的情况。

  1. 禁用多帐户登录(每个帐户最多不超过1个客户端)。

由于登录检查用户是否未使用“ loggedin”标志登录,因此将不允许多重登录。如果您发现瑕疵,请告诉我。

  1. 额外:有没有更好的方法?

我也阅读了有关会议的内容,但这是否需要?会改善我的处境还是一样?

谢谢。

0 个答案:

没有答案