В этой статье мы узнаем, как реализовать аутентификацию для нашего сервера NodeJS + Express с помощью веб-токенов JSON. Эта статья проведет вас через начальную настройку сервера до полностью работающего сервера с работающей аутентификацией.

Статья состоит из следующих разделов. Если вы хотите сразу погрузиться в кодовую часть. Перейдите к настройке проекта:

  • Понимание веб-токенов JSON
  • Настройка проекта
  • Настройка базы данных
  • Реализация промежуточного программного обеспечения Auth
  • Добавление маршрутизации
  • Подписание токена
  • Соединение точек

Понимание веб-токенов JSON

Веб-токен JSON или JWT используется для безопасной передачи информации о пользователе между сторонами в виде объекта JSON. Он состоит из заголовка, полезной нагрузки и подписи.

Заголовок определяет тип токена и алгоритм, используемый для его проверки.

{
   "type" : "JWT",
   "alg" : "HS256"
}

Полезная нагрузка содержит информацию, которую мы хотим передать. Например

{
   id : 1
   email : '[email protected]'
}

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

Настройка проекта

Давайте начнем с создания пустого репозитория и выполним следующие команды. Это инициализирует репозиторий npm и установит все необходимые зависимости. Мы рассмотрим каждую из них позже.

npm init -y
npm install --save bcrypt-nodejs body-parser dotenv express http jsonwebtoken mongoose passport passport-jwt passport-local

Давайте продолжим создание структуры папок.

  • config будет содержать переменные конфигурации, такие как URI базы данных.
  • контроллеры содержат внутреннюю логику, например проверку JWT.
  • модели будут определять структуру нашей базы данных
  • маршруты будут определять наши конечные точки API.
  • сервисы внедряют стороннюю интеграцию

Настройка базы данных

Наша база данных будет содержать только одну модель - User. В этом примере нам нужны только два поля. Но учтите, что эта модель легко расширяется. Модель гарантирует, что мы не раскрываем пароль пользователя при вызове конечных точек API. И этот пароль хешируется и солится при создании нового пользователя. Он также содержит вспомогательную функцию для проверки правильности пароля.

Реализация промежуточного программного обеспечения Auth

Нам нужно ровно 3 промежуточного программного обеспечения или стратегии. Один из них создаст нового пользователя, который будет использоваться для регистрации. Второй проверит, существует ли пользователь и правильный ли пароль. Он будет использоваться для входа в систему. И третий, чтобы проверить, действительно ли JWT верен. Он также извлечет из токена информацию о пользователе. Он будет использоваться для защиты наших маршрутов.

Добавление маршрутизации

Наши маршруты аутентификации будут довольно простыми. Они просто будут использовать промежуточное ПО, которое мы определили на предыдущем шаге, и возвращать ответ пользователю. Если нужна дополнительная логика. Это будут обрабатывать контроллеры

Подписание токена

Когда новый пользователь регистрируется или существующий входит в систему. Нам нужно создать для него / нее токен. Этот токен будет возвращен в ответ на наши запросы API. Вы можете видеть, что мы вызываем generateToken функцию во фрагменте кода выше. Эта функция просто берет объект пользователя и создает из него подписанный токен JWT.

Соединение точек

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

  • Загружать переменные среды (мы не хотим раскрывать конфиденциальные данные, такие как URI базы данных)
  • Инициализировать модели базы данных и подключиться к базе данных
  • Создает экспресс-приложение
  • Добавляем парсеры к нашим запросам
  • Инициализировать паспорт и маршруты
  • И, наконец, прослушивать входящие запросы на указанном порту.

Вывод

И это фактически все. Если вы хотите увидеть весь пример в действии. Щелкните здесь, чтобы перейти в репозиторий GitHub.

А теперь настало время подвести итоги. В этой статье мы узнали:

  • Как работают JSON Web Tokens (если вы не пропустили эту часть)
  • Как настроить экспресс-сервер с нуля
  • Как добавить промежуточное ПО auth для работы с JWT
  • Как защитить конечные точки API с помощью проверки JWT

Если у вас есть какие-либо вопросы, комментарии или предложения, дайте мне знать в разделе комментариев ниже. До скорого!