Почему я это делаю?

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

Я нашел Документацию Auth0 очень простой для понимания, и, что наиболее важно, весь процесс аутентификации было чрезвычайно легко реализовать в SPA.

Веб-сайт формы Auth0:

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

СОСРЕДОТОЧЬТЕСЬ НА СВОЕМ ОСНОВНОМ БИЗНЕСЕ!

Это то, что мы всегда должны помнить.

Начиная

В этом руководстве объясняется, как настроить аутентификацию для SPA Nuxt.js с использованием Auth0 и ПОТОКА аутентификации PKCE.

Мы будем изучать следующие вещи:

  • Настройте клиент Auth0
  • Настройте SPA Nuxt.js
  • Интегрируйте Auth0 в наше SPA с помощью auth0-spa-js

Настройка клиента Auth0

Прежде всего, мы собираемся настроить поле входа Auth0.

Затем в разделе Приложения Auth0 нажмите Создать приложение.

На открывшейся странице конфигурации выберите вкладку Настройки.

Прокрутите страницу и добавьте http://localhost:3000 к каждому URI приложения (за исключением URI входа в приложение).

Обновить токен

Теперь мы можем выбрать, какой тип токена обновления мы хотим для нашего приложения.

Нам предлагается выбрать одно из двух действий Refresh Token:

Ротация токена обновления выдает новый токен обновления и делает недействительным предыдущий. Мы легко можем сказать, что ротация токена обновления снижает риск компрометации токена обновления.

Подробнее о ротации токенов Refresh здесь.

Нас попросят ввести время жизни и интервал повторного использования токена обновления.

Теперь откройте Дополнительные настройки,выберитеТипы предоставлениявкладкуи убедитесь, чтоэтоКод авторизации и Обновить токен установлены

Наконец, нажмите Сохранить изменения.

Настройка Nuxt.js SPA

Начните с создания нового нового приложения Nuxt.js.

create-nuxt-app nuxt-auth0

Инструмент командной строки теперь задаст несколько вопросов.
Важно: при запросе режима рендеринга выберите «Одностраничное приложение».

? Choose rendering mode
  Universal (SSR)
❯ Single Page App

По завершении мы можем получить доступ к вновь созданной папке и запустить приложение, набрав (на основе диспетчера пакетов, который мы выбрали ранее)

yarn dev
//OR
npm run dev

Давайте посмотрим на наше приложение, работающее по адресу http://localhost:3000.

Пришло время защитить нашу индексную страницу, и для этого мы устанавливаем auth0-spa-js.

auth0-spa-js

yarn add @auth0/auth0-spa-js
//OR
npm install @auth0/auth0-spa-js

Примечание: существует высокая вероятность того, что мы столкнемся с ошибкой в ​​консоли Nuxt при установке библиотеки auth0-spa-js: для этого пакета требуется установить core-js@2.

yarn add core-js@2
//OR
npm install --save core-js@2

Я знаю, что core-js@2 больше не поддерживается, но я не могу понять, в чем проблема (если вы найдете решение, напишите его в разделе комментариев ниже 🙏)

Теперь мы создаем новый плагин с именем auth0.js.

Таким образом, мы можем получить доступ к $auth0 в каждом файле нашего проекта.

Затем мы добавляем только что созданный подключаемый модуль в файл nuxt.config.js.

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

Примечание. Эта функция в первую очередь пытается обработать обратный вызов перенаправления входа. Если запрошенная страница, защищенная этим промежуточным ПО, НЕ является первой страницей, вызываемой после входа в систему, функция handleRedirectCallback выдает ошибку.
Мы проверяем, аутентифицирован ли пользователь, вызывая getTokenSilently : в случае отрицательного ответа (это может произойти, когда мы вообще не аутентифицированы или токен доступа устарел и не может быть обновлен) пользователь будет перенаправлен на URL-адрес Auth0 /authorize, который показывает окно входа Auth0 (с функцией redirect) .

Примечание 2. Если нужно защитить более одной страницы, мы можем получить URL-адрес, к которому мы пытались получить доступ (target.fullPath), и передать его вызову buildAuthorizeUrl. Этот URL-адрес будет возвращен приложению после аутентификации и используется для перенаправления нас в место, которое мы пытаемся достичь до входа в систему.

Примечание 3. Обратите внимание, что мы используем buildAuthorizeUrl вместо loginWithRedirect. Это единственный способ избежать Nuxt.js для отображения запрошенной страницы, даже если мы не аутентифицированы. Причина в том, что loginWithRedirect звонит window.location.assign(url)

Наконец, мы добавляем промежуточное ПО и кнопку выхода на страницу index.vue.

Это все, что нам нужно, пришло время увидеть все в действии на http://localhost:3000

TL;DR В этот момент вы можете легко спросить меня: почему вы не используете замечательный модуль аутентификации Nuxt.js?
В данный момент , модуль аутентификации обеспечивает только неявный поток предоставления.
В чем разница между потоком аутентификации PKCE и неявным потоком предоставления?

С неявным токеном доступа к потоку предоставления предоставляется на стороне клиента и не возвращает токен обновления, поскольку браузер не может сохранить его закрытым.

Если вы хотите посмотреть дальше, нажмите здесь.

Первый доступ

Когда мы попытаемся достичь http://localhost:3000, мы будем перенаправлены в окно входа Auth0.

После создания пользователя приложение nuxt-auth0 запросит доступ к нашей учетной записи арендатора.

После нажатия «Принять» мы будем перенаправлены на нашу индексную страницу.

Вот и все.

Я надеюсь, что вы нашли этот урок полезным!

Ресурсы

Вы можете найти окончательный код в этом репозитории GitHub

Примечание от JavaScript In Plain English

Мы запустили три новых издания! Проявите любовь к нашим новым публикациям, подписавшись на них: AI на простом английском, UX на простом английском, Python на простом английском — спасибо и продолжайте учиться!

Мы также всегда заинтересованы в помощи в продвижении качественного контента. Если у вас есть статья, которую вы хотели бы отправить в какое-либо из наших изданий, отправьте нам электронное письмо по адресу [email protected], указав свое имя пользователя на Medium, и мы добавим вас в качестве автора. Также сообщите нам, к каким публикациям вы хотите добавиться.