jsonwebtoken: что такое полезная нагрузка - PullRequest
0 голосов
/ 08 марта 2019

Я хочу использовать веб-токены json для проверки пользователя, и я собираюсь использовать метод jwt.sign, но термин «полезная нагрузка» смутил меня согласно определению полезной нагрузки Википедии (в вычислениях):

В вычислительной технике и телекоммуникациях полезная нагрузка - это часть передаваемых данных, которая является фактически предполагаемым сообщением. Заголовки и метаданные отправляются только для включения доставки полезной нагрузки. [1] [2]

но по среднему коду

    const jwt = require('jsonwebtoken');
app.post('/api/authenticate', function(req, res) {
  const { email, password } = req.body;
  User.findOne({ email }, function(err, user) {
    if (err) {
      console.error(err);
      res.status(500)
        .json({
        error: 'Internal error please try again'
      });
    } else if (!user) {
      res.status(401)
        .json({
         error: 'Incorrect email or password'
        });
    } else {
      user.isCorrectPassword(password, function(err, same) {
        if (err) {
          res.status(500)
            .json({
              error: 'Internal error please try again'
          });
        } else if (!same) {
          res.status(401)
            .json({
              error: 'Incorrect email or password'
          });
        } else {
          // Issue token
          const payload = { email };
          const token = jwt.sign(payload, secret, {
            expiresIn: '1h'
          });
          res.cookie('token', token, { httpOnly: true })
            .sendStatus(200);
        }
      });
    }
  });
});

полезная нагрузка - это электронная почта, предоставленная пользователем для аутентификации, которая смутила меня, я буду рад, если кто-нибудь объяснит, что такое полезная нагрузка и какова роль полезной нагрузки в jwt.sign ()

1 Ответ

1 голос
/ 08 марта 2019

В веб-токенах JSON полезная нагрузка представляет собой набор полей, которые вы хотите включить в генерируемый токен; Вещи, которые понадобятся вашему API, скажем, для получения правильных данных для конкретного пользователя.

Это просто простой объект JSON, который обычно используется для включения идентификационных данных пользователя, таких как идентификатор пользователя, идентификатор учетной записи или адрес электронной почты. Однако он также может содержать любые произвольные данные, которые могут вам понадобиться, такие как полное имя пользователя, языковые настройки и т. Д.

Пример полезной нагрузки может выглядеть следующим образом, если предположить, что это те поля, от которых зависит ваш API для получения сведений о пользователе / ​​учетной записи, к которой принадлежит токен. Обратите внимание, что это будет считаться довольно большой полезной нагрузкой; Большинство полезных нагрузок имеют только одно поле идентификатора пользователя, так как обычно это единственная конечная точка, которая должна правильно идентифицировать пользователя.

{
  user_id: 303,
  account_id: 909,
  email: 'joe@example.com',
  full_name: 'Joe Blow',
  default_language: 'en_US'
}

ПРЕДУПРЕЖДЕНИЕ: Полезная нагрузка НЕ зашифрована, поэтому убедитесь, что вы не храните в ней такие вещи, как пароли, секретные ключи, номера кредитных карт, остатки на банковских счетах и ​​т. Д. Только идентификаторы, такие как идентификаторы, которые вы видите в URL или открытых ключах, должны быть сохранены.

Кроме того, полезная нагрузка влияет на общую длину токена (чем больше данных, тем длиннее токены), поэтому вам нужно включать только самые важные фрагменты данных. В противном случае вы будете отправлять очень большой токен при каждом запросе, который потребляет пропускную способность и, теоретически, занимает больше ресурсов сервера для декодирования.

Наконец, JWT не имеют состояния, то есть они не сеансы. Поэтому не включайте какие-либо данные, которые часто изменяются, такие как результаты игр, последний вход и т. Д.

...