Хранение и использование JWT и секретного ключа - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть маршрут для входа в мое приложение.Я использую jwt tokens для защиты маршрутов, но у меня возникают проблемы с полным пониманием использования secret key.

Я подумал, что мне нужно использовать секретный ключ для проверки jwt.Всякий раз, когда пользователь входит в систему, я отправляю JWT Token и Secret key пользователю.JWT хранится в локальном хранилище (хранилище телефона или приложения)

Что мне делать с секретным ключом?Должен ли я хранить данные как в локальной сети, так и в базе данных?

Маршрут входа в систему

api.post('/api/login', (req, res) => {

var secretKey;

require('crypto').randomBytes(48, function(err, buffer) {
    secretKey = buffer.toString('hex');

    //Create JWT and Secret Key
    jwt.sign({user}, secretKey, {expiresIn: '30s'}, (err, token) => {
        res.json({
            access_token : token,
            secret_key : secretKey

        });
    });


});

});

Ответ после входа в систему

{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7ImlkIjoxLCJ1c2VybmFtZSI6ImV4YW1wbGV1c2VyIiwiZW1haWwiOiJleGFtcGxlQGdtYWlsLmNvbSJ9LCJpYXQiOjE1NTExMTE1ODAsImV4cCI6MTU1MTExMTYxMH0.aSTVC-HcEdrH1KBNtuD_MoLZ8DWnSiM6bCqO4EgJ5zM",
"secret_key": "2e6a98abb5b23339ad14601d3bedc1d23847498cb18daf8cfc98c2a2095ec8f47d80053f6d4e22b8f6419407ac3083dc"}

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

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

Если ваш секретный ключ имеет асимметричную подпись, вы можете сгенерировать открытый ключ на основе секретного (частного) ключа в форме так называемого веб-ключа JSON ( читайте о JWK здесь ),Затем этот открытый ключ может быть передан любому юниверсу, а открытый ключ может использоваться только для проверки JWT;открытый ключ не может быть использован для подписи новых токенов.

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

0 голосов
/ 25 февраля 2019

Никогда не отправляйте клиенту секретный ключ.Вы должны хранить секретный ключ на вашем сервере.Вам необходимо подписать и проверить токены jwt.

Это должен быть поток:

  • Логин пользователя
  • Сервер генерирует JWT (используя секретный ключ) иотправить его (только jwt) клиенту
  • Клиент сохраняет JWT в локальном хранилище или в том месте, где вы хотите, и отправляет его в качестве заголовка на сервер, когда ему необходимо выполнить аутентифицированные вызовы http.
  • Когда сервер получает аутентифицированный вызов, он должен проверить JWT (используя тот же секрет, что и для входа в систему) для аутентификации вызова.

Подробнее о JWT можно узнать на https://jwt.io/

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