На примере мы продемонстрируем, как использовать Auth0 для защиты API Node.js (Express), к которому обращается одностраничное приложение.
Раньше я использовал Passport для защиты своих API Node.js; не так много кода, но было немного сложно правильно настроить в первый раз. Этот подход также значительно усложняется, поскольку мы добавляем дополнительные требования к аутентификации, например, социальную интеграцию и т. Д.
Я также использовал Firebase для создания защищенных API; Хотя это очень просто, Firebase не подходит для многих проектов (недостаточно гибко)
Оказывается, Auth0 сочетает в себе гибкость API-интерфейсов Node.js с простотой его защиты.
Эта серия статей полностью соответствует документации Auth0 по Сценариям архитектуры› SPA + API ; просто на более простом и понятном примере.
Окончательное решение этой серии доступно для скачивания.
Предварительные требования
Чтобы продолжить эту серию, необходимо:
- Аккаунт Auth0 (бесплатно)
- Node.js; использовалась последняя версия LTS (8.12.0)
- Современный браузер; использовал Chrome
- Почтальон
Небезопасный API
Давайте начнем с создания нашего небезопасного (без аутентификации) API; начиная с Express пример Hello World.
В новой папке введите (и примите все значения по умолчанию):
npm init
Затем мы устанавливаем Express:
npm install express
Затем мы создаем небезопасный API.
index.js
Наблюдение:
- Я не могу жить без точки с запятой; поэтому я добавил их обратно (улыбается)
- Порт изменен с 3000 на 8080, поскольку мы будем использовать 3000 позже.
Запуск нашего API и тестирование с помощью Postman:
node index.js
Небезопасное приложение
Теперь, когда у нас есть API (предположим, что он все еще работает), давайте создадим приложение (одностраничное приложение), которое его использует. В другой папке создаем:
index.html
Наблюдения:
- Прошло какое-то время, но это старая школа ES5
- Поскольку мы все еще хотим поддерживать IE11, мы используем полифиллы ES6 (Babel polyfill) и fetch (whatwg-fetch).
Теперь мы можем запустить наше приложение, введя и открыв браузер по адресу http: // localhost: 3000
npx http-server -p 3000 -c-1
Наблюдения:
- Пакет Node.js, http-server, представляет собой простой статический веб-сервер; обслуживание нашего файла index.html
- Параметр -c гарантирует, что приложение никогда не кэшируется; полезно во время разработки
- Нажатие кнопки Получить приведет к возникновению ошибок JavaScript; виден в консоли
- Первая ошибка заключается в том, что API и приложение работают на разных портах (т.е. на разных портах); мы получаем ошибку совместное использование ресурсов между источниками (CORS)
- Вторая ошибка (замаскированная первой) заключается в том, что ответ, строка hello world, недействителен JSON.
Фиксированный небезопасный API
Сначала мы устраняем ошибку CORS. Из папки API вводим:
npm install cors
и обновить:
index.js
и чтобы исправить ответ, мы также обновляем:
index.js
С этими изменениями и перезапуском API мы видим, что нажатие кнопки Get выводит ожидаемый ответ на консоль.
Дальнейшие действия
Настроив небезопасный API и приложение, теперь мы можем перейти к их защите в Упрощенная аутентификация с Auth0: Часть 2.
✉️ Подпишитесь на рассылку еженедельно Email Blast 🐦 Подпишитесь на CodeBurst на Twitter , просмотрите 🗺️ План развития веб-разработчиков на 2018 год и 🕸️ Изучите веб-разработку с полным стеком .