Создание процесса аутентификации с использованием веб-токена JSON с 3 уровнями защиты

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

  • Заголовок - часть заголовка определяет алгоритм, используемый для создания токена.
  • Подпись - часть, предназначенная для декодирования токена с помощью подписей и отображающая его подлинность.
  • Полезная нагрузка - благодаря имени инкапсулирует любые данные, необходимые для отправки через токен, в защищенной форме с 64-базовым кодированием.

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

https://jwt.io/introduction

Обзор

Идея этого блога состоит в том, чтобы поделиться обзором того, как работать с JWT в бэкэнде, и создать процесс аутентификации пользователя.

  • Я буду создавать конечные точки регистрации, входа и decodeToken для пользователей нашего приложения.
  • После того, как пользователь будет создан или успешно вошел в систему, предоставьте ему токен JWT, созданный с использованием электронной почты пользователя.
  • У каждого сгенерированного токена истекло время и пользовательские данные в соответствующей полезной нагрузке.
  • После того, как пользователь вошел в систему, все остальные запросы к нашему серверу должны выполняться с этим токеном, присутствующим в заголовке.
  • Как только токен будет получен в заголовке другого API, мы декодируем его, чтобы показать его подлинность.
  • Наконец, как только предоставленный токен станет действительным токеном, пользователю будет разрешено сделать запрос на наши серверы.

Написание кода

Я начну с установки базового репозитория с помощью Express. Идите вперед и установите все необходимые пакеты, которые мы будем использовать.

yarn add express, body-parser, cors, nodemon, axiox, jsonwebtoken

После добавления пакетов создайте базовый маршрут входа в систему и регистрации в папке маршрутов внутри файла authRoutes.js.

Тестирование маршрутов путем перенаправления на конечную точку / логин и / регистрацию в порту локального хоста 3000.

Создание токена

Основная идея при создании защищенного токена JWT состоит в том, чтобы подписать токен с помощью ключа и адреса электронной почты пользователя.

- Ключ, который мы будем использовать, - это ключ, добавленный нами вручную, а адрес электронной почты будет идентификатором электронной почты пользователя, указанным в запросе API.

- Мы будем использовать метод JWT sign для подписи и генерации нашего токена.

jwt.sign({ email: email},process.env.JWTSecretKey,{expiresIn:'14d'})

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

- Наш токен создается с использованием идентификатора электронной почты пользователя и ключа. Здесь используется ключ JWTSecretKey. Обратите внимание, что этот ключ должен быть добавлен в файл env.

- Доступ к константам файлов env с помощью пакета dotenv npm

- Добавьте пакет dotenv npm и запустите dotenv.config() в корневом server.js

// Terminal 
  yarn add dotenv
// server.js
 const dotenv = require('dotenv'); 
 dotenv.config();

- Используя метод process.env, вы можете получить все константы из файла .env.

Отправка подписанных токенов

Мы отправим токен пользователю в ответ на конечную точку / login. Мы также можем проверить обычную экспресс-доставку электронного письма, отправленного пользователем, и вернуть сообщение об ошибке, если электронное письмо плохо отформатировано.

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

Токен декодирования

- Чтобы расшифровать подлинность токена, нам снова потребовались адрес электронной почты пользователя и токен.

- Сам JWT предоставляет метод под названием verify, который принимает отправленный токен и JWTSecretKey из файла env в качестве аргумента.

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

- В этом методе мы выполнили следующие шаги -

  • сначала мы проверяем электронную почту и заголовки в теле и заголовке запроса соответственно.
  • Затем выполняется проверка действительности токена с помощью метода jwt.verify ().
  • Другой уровень защиты - проверить, содержит ли полезная нагрузка декодированного токена адрес электронной почты пользователя или нет, и перепроверить значение с электронным письмом, отправленным в теле запроса.

- Таким образом, мы можем проверить подлинность пользователя с помощью токенов, и как только пользователь станет действительным токеном, мы дадим ему доступ к нашему серверу и приложению.

- Ниже приведены скриншоты десктопного приложения Почтальон всех этапов для конечной точки / decodeToken.

Вывод

Это наиболее безопасный способ проверки подлинности пользователя для предоставления ему доступа к нашим серверам. Сам JWT - это очень безопасный способ использования двухуровневой безопасности, и мы добавили еще один третий уровень, использующий данные в полезной нагрузке JWT, чтобы обеспечить более безопасный способ доступа к нашим серверам. И последнее: вы можете напрямую сохранить эти токены JWT в файле cookie браузера или отправить токен из API в самом файле cookie. У этого процесса есть преимущество: нам просто нужно проверить файл cookie в браузере и его действительность в приложении Frontend, чтобы пользователь мог получить доступ к защищенным маршрутам. Если вам нужна дополнительная информация о том, как работать с токеном в Frontend, я добавляю ссылку на свою статью ниже.

https://medium.com/p/c60db33f1921?source=post_stats_page-------------------------------------

До скорого. Хорошего дня, Народ.

Code => https://github.com/shreyvijayvargiya/iHateReadingLogs/tree/main/TechLogsBackend/GettingStartedWithJWT

Больше контента на plainenglish.io