В этой статье мы узнаем, как реализовать аутентификацию для нашего сервера 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
Если у вас есть какие-либо вопросы, комментарии или предложения, дайте мне знать в разделе комментариев ниже. До скорого!