Создание процесса аутентификации с использованием веб-токена 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