Цели
Узнайте, как использовать express.js для создания простого RESTful API для демонстрации аутентификации JWS.
Технический стек
JavaScript, Node.js, экспресс.js, Nodemon
Что такое промежуточное ПО?
Промежуточное ПО в node.js — это функция, которая будет иметь все права доступа для запроса объекта, ответа на объект и перехода к следующей функции промежуточного ПО в приложении цикл запрос-ответ. Эту функцию можно использовать для изменения объектов req и res для таких задач, как добавление заголовков ответа, анализ тела запроса и т. д. Прочтите этот пост, чтобы узнать больше о промежуточном программном обеспечении.
Реализация JWT: токен доступа
Обзор
Это приложение Node.js, использующее Express.js, которое обслуживает список сообщений. Он включает аутентификацию с использованием веб-токенов JSON (JWT) для защиты конечной точки «/posts», гарантируя, что только авторизованные пользователи могут получать доступ к принадлежащим им сообщениям.
Создайте наш сервер
- app.use(express.json()):добавляет промежуточное ПО в приложение Express, которое анализирует входящие данные JSON. Это позволяет приложению обрабатывать полезные данные JSON в запросах.
- app.get("/posts", authenticationToken, (req, res) =› {…}): Устанавливает маршрут HTTP GET по пути "/posts". Когда клиент отправляет запрос GET в «/posts», сначала выполняется промежуточная функция authenticationToken, а затем вызывается функция обратного вызова для маршрута, если аутентификация прошла успешно.
- function authenticationToken(req, res, next) {…}: Это промежуточная функция с именем authenticationToken. Функции ПО промежуточного слоя имеют доступ к объектам запроса (req) и ответа (res) и могут выполнять действия перед передачей управления следующему ПО промежуточного слоя или обработчику маршрута.
Создайте другой сервер аутентификации
В этом фрагменте кода, когда клиент отправляет запрос POST на «/login» с именем пользователя в теле запроса, сервер аутентифицирует пользователя (в данном случае просто создает объект пользователя с именем пользователя). Затем сервер генерирует токен доступа с помощью функции generateAccessToken, который включает информацию о пользователе (имя пользователя) и срок действия 60 секунд.
Здесь мы можем использовать расширение vscode REST Client для тестирования нашего сервера.
Отправить POST-запрос на сервер
POST http://localhost:4000/login Content-Type: application/json { "username": "Willie" }
Вы получите ответ от сервера, подобный этому:
Замените токен доступа в своем запросе GET, а затем вы можете снова запросить сервер.
GET http://localhost:3000/posts Authorization: Bearer {YOUR_ACCESS_TOKEN}
Вы получите ответ (все посты принадлежат конкретному пользователю, в данном случае: Вилли) от сервера примерно такого вида:
Реализация JWT: токен обновления
Здесь мы модифицируем authServer.js и реализуем конечную точку /token для обмена токена обновления на новый токен доступа. Обратите внимание, что мы используем массив для хранения токенов обновления, что не рекомендуется в рабочей среде. В рабочей среде токены обновления следует хранить в базе данных.
Теперь, когда мы можем получать токены доступа на основе токена обновления, возникает опасение, что пользователи могут иметь неограниченный доступ к нашему API, что нежелательно. Чтобы решить эту проблему, мы должны внедрить механизм отмены аутентификации, чтобы при необходимости отозвать токен обновления.
Деаутентификация (выход)
В приведенном ниже фрагменте кода мы добавляем конечную точку выхода, которая удаляет токен обновления из массива токенов обновления. В рабочей среде следует удалить токен обновления из базы данных.
Давайте проверим нашу конечную точку /logout:
DELETE http://localhost:4000/logout Content-Type: application/json { "token": {YOUR_REFRESH_TOKEN} }
Когда пользователь отправляет запрос POST на эту конечную точку, у пользователя больше нет доступа к нашему бэкэнду!
Заключение
Это обертка! С помощью Express.js мы можем удобно тестировать аутентификацию JWS и моделировать ее работу. Надеюсь, вам понравится этот пост!
Оформить заказ все мои сообщения в БЛОГЕ
Ресурсы
- Учебное пособие по аутентификации JWT — Node.js
- Как создать промежуточное ПО для Node.js: полное руководство
Дополнительные материалы на PlainEnglish.io.
Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .