Работаем над системой аутентификации токенов и есть пара вопросов о jsonwebtoken - PullRequest
0 голосов
/ 12 июля 2020

У меня есть развязанный Vue. js внешний интерфейс + Node.js сервер, и прямо сейчас я пытаюсь реализовать систему аутентификации токена, но у меня есть несколько вопросов.

jwt.sign({ foo: 'bar' }, privateKey, { algorithm: 'RS256' }, function(err, token) {
  console.log(token);
});

Прежде всего, для генерации токена функции требуется закрытый / секретный ключ. Я немного смущен тем, как должен выглядеть этот ключ и должен ли он быть одинаковым для всех токенов или должен быть уникальным. И где мне хранить этот ключ?

Второй вопрос: из чего должна состоять полезная нагрузка. В этом примере {foo: 'bar'} используется как полезная нагрузка. В моем приложении после регистрации пользователя я сохраняю его информацию в базе данных и получаю объект, который выглядит следующим образом:

    let user = {
        username: 'Test1',
        password: '$2a$12$lLnLRVHiI7yI4br.ys2aj.5EVcIjRD7BkV',
        email: 'test1@gmail.com'
    }

Я просто передаю объект пользователя в качестве полезной нагрузки в jwt.sign () или мне просто передать одно свойство?

1 Ответ

1 голос
/ 12 июля 2020

1, ваш личный токен должен быть достаточной длины, чтобы его было труднее подобрать.

2, он должен быть одинаковым для всех токенов.

3, он должен храниться в безопасности на стороне сервера. На этот вопрос невозможно ответить, не зная вашей настройки. Но не проверяйте его в git, не помещайте в клиент (чтобы все могли видеть).

4, не помещайте секреты / пароли в полезную нагрузку. Они не зашифрованы. Вы можете взять любой токен и декодировать его в jwt.io , не зная секрета.

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

Таким образом, вы можете поместить в полезную нагрузку все, что хотите, для проверки. Хороший вариант использования - userId. Если проверка токена прошла успешно, вы знаете, что он был создан с секретом. Но секрет в клиенте, каждый клиент может создать действующий токен. Так что не забудьте сохранить это в секрете и на стороне сервера. Никогда не помещайте в токен пароли или другие секреты. Они будут на 100% видны всем.

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