Если вы тратите более 10 минут на настройку серверной аутентификации, вы можете пересмотреть свою стратегию, используя стороннюю службу аутентификации, которая поможет вам защитить внутреннюю аутентификацию и авторизацию в серверной части, пока вы сосредоточитесь на другом важном аспекте. вашего приложения, это круто, верно.
Эта статья представляет собой краткое руководство по настройке экспресс-приложения js со сторонней проверкой подлинности (Auth0) за десять минут.
Давайте начнем с инициализации node js
приложения с нуля, перейдите в нужный каталог и создайте папку для этого проекта, откройте папку в терминале и запустите npm init -y
, чтобы быстро настроить новый npm
пакет, запустите npm install express dotenv express-openid-connect
из того же каталога.
Мы будем использовать эти три пакета на протяжении всего проекта, express
конечно, вы должны быть знакомы с используемой нами веб-платформой Node, dotenv
— это пакет, который поможет нам загружать переменные окружения из .env
файла (мы будем хранить наш секретный подробности в файле .env
) и, наконец, express-openid-connect
— это пакет, который мы будем использовать для реализации аутентификации для нашего приложения.
Создайте файл, запустив touch app.js
на терминале в том же каталоге, где мы будем писать наш код, откройте app.js
в предпочитаемом вами редакторе и введите следующий шаблон, чтобы запустить приложение.
const express = require(‘express’); //import express module require(‘dotenv’).config() //configure the dotenv package const app = express() //initialise express app.get(‘/’, (req, res) => { res.send(‘Hello World from auth0’) }) const PORT = process.env.PORT || 3000 //set a constant variable for our port app.listen(PORT, () => { console.log(`app listening on port ${PORT}`) });
Приведенный выше фрагмент кода просто устанавливает наше экспресс-приложение более или менее как шаблон, и если вы запустите это приложение на терминале, запустив node app.js
, вы должны увидеть Hello World от auth0 в своем браузере по адресу http://localhost:3000/. ».
Теперь, когда приложение запущено, мы должны настроить нашу учетную запись auth0, посетить https://auth0.com/ в своем браузере и создать новую бесплатную учетную запись, перейти на вкладку приложения и создать новое приложение, дать ему имя. по вашему выбору и выберите обычное веб-приложение, как показано на изображениях ниже.
Перейдите на вкладку настроек приложения, которое вы только что создали, и запишите Домен и Идентификатор клиента приложения, которое вы только что создали в auth0, вы можете скопировать и сохранить их где-нибудь. скоро мы будем использовать его в нашем экспресс-приложении.
Прокрутите вниз в настройках и найдите вкладку URI приложений, введите http://localhost:3000/login в поле URI входа в приложения, это означает, что ваш маршрут входа — это указанный выше адрес, если пользователь посещает этот маршрут, он перенаправит их на auth0 войдите для аутентификации, прежде чем пользователь сможет получить доступ к вашему веб-приложению.
Заполните http://localhost:3000/callback в URL-адресе разрешенного обратного вызова, это означает, что после аутентификации пользователя auth0 перенаправит пользователя на этот маршрут на вашем веб-сайте, поэтому вы можете просто заполнить это поле любой страницей, которую вы хотите. пользователь, чтобы увидеть после входа в систему.
Заполните http://localhost:3000/logout в URI разрешенного выхода, пользователь может просто выйти из системы, нажав запрос на получение на этом маршруте.
После завершения настройки вы можете прокрутить страницу вниз и сохранить изменения, чтобы сохранить изменения.
После успешного завершения вышеуказанной настройки мы можем вернуться к нашему app.js
, чтобы сделать все остальное.
Создайте файл с именем .env
в папке приложения для хранения переменных среды. Помните, я говорил вам скопировать некоторую информацию (Домен и Идентификатор клиента) на странице настроек auth0. .
Скопируйте приведенный ниже текст и вставьте его в файл .env
.
ISSUER_BASE_URL=https://YOUR_DOMAIN CLIENT_ID=YOUR_CLIENT_ID BASE_URL=https://YOUR_APPLICATION_ROOT_URL SECRET=LONG_RANDOM_VALUE
Значение ISSUE_BASE_URL
должно быть значением домена, которое вы скопировали из настроек приложения auth0.
Значение для CLIENT_ID
должно быть идентификатором клиента из настройки вашего приложения auth0.
Значение BASE_URL
должно быть http://localhost:3000/, что является корневым маршрутом вашего домена.
Значение SECRET
может быть любым, длинным словом или предложением, но избегайте пробела
Все переменные в .env
file не являются вашей обычной строкой javascript, поэтому не должны начинаться или заканчиваться кавычками ('')
Мы закончили с переменными среды, поэтому вернитесь к app .js
и добавьте этот код сразу после const app = express()
.
const { auth } = require(‘express-openid-connect’); app.use( auth({ issuerBaseURL: process.env.ISSUER_BASE_URL, baseURL:process.env.BASE_URL, clientID:process.env.CLIENT_ID, secret: process.env.SECRET, idpLogout: true, }) );
{ auth }
предоставляется нам пакетом express-openid-connect
, который мы установили при запуске нашего экспресс-приложения, и в основном тем, что мы будем использовать для настройки нашей аутентификации с помощью auth0, process.env
, который мы неоднократно использовали в приведенном выше коде, предназначен для сбора наших переменных из файла .env
и его импорта. в out app.js
для использования аутентификацией (express-openid-connect) для целей идентификации, то есть для связи этого express app
с приложением auth0, которое мы создали ранее.
На этом мы закончили с необходимыми настройками, нам просто нужно проверить наши конечные точки, но есть еще одна вещь, которую нам нужно сделать, чтобы завершить.
Если вы попытаетесь посетить http://localhost:3000/, вам будет предложено войти в систему через auth0, произошло то, что по умолчанию auth0 защитил все маршруты, т. е. вы должны пройти аутентификацию / войти в систему, прежде чем вы сможете просматривать любой ресурс. что вы, возможно, не хотите быть таким. Обычно должен быть какой-то маршрут, по которому любой пользователь может пройти без аутентификации, поэтому, чтобы изменить этот параметр, добавьте auth0Logout: true
и authRequired: false
в параметр auth
. auth0Logout: true
— инициировать выход из приложения по умолчанию, а authRequired: false
— удалить аутентификацию на всех маршрутах по умолчанию, после чего мы можем защитить любой маршрут, который мы хотим защитить. См. код ниже;
const express = require(‘express’); require(‘dotenv’).config() const { auth, requiresAuth } = require(‘express-openid-connect’); const app = express() app.use( auth({ issuerBaseURL: process.env.ISSUER_BASE_URL, baseURL:process.env.BASE_URL, clientID:process.env.CLIENT_ID, secret: process.env.SECRET, idpLogout: true, auth0Logout: true, authRequired: false }) ); app.get(‘/’, (req, res) => { res.send(req.oidc.isAuthenticated ? ‘Logged In’ : ‘Logged Out’) }) app.get(‘/callback’, requiresAuth(), (req, res) => { res.send(JSON.stringify(req.oidc.user)) }) const PORT = process.env.PORT || 3000 app.listen(PORT, () => { console.log(`app listening on port ${PORT}`) })
Если вы посетите http://localhost:3000/, вы сможете просматривать страницу, даже если вы не вошли в систему, но отображаемое сообщение будет динамическим, если вы вошли в систему, вы увидите Вошел в систему. и если вы вышли из системы, вы увидите Вошел в систему.
Если вы посетите http://localhost:3000/callback, вы сможете увидеть ресурс на этом маршруте только в том случае, если вы вошли в систему, в противном случае вам будет предложено сделать это службой аутентификации auth0. Попробуйте поиграть с приложением, зарегистрируйте несколько учетных записей, войдите в каждую из них и посмотрите, как auth0 помогает нам упростить аутентификацию.
Заключение
В этом руководстве мы можем покрыть аутентификацию с помощью auth0, что просто происходит за капотом, так это то, что когда пользователь нажимает маршрут входа в систему нашего приложения, пользователь перенаправляется на auth0 для аутентификации, и если auth0 находит пользователя подлинным, пользователь перенаправляется вернуться к URL-адресу обратного вызова для доступа к ресурсам нашего приложения.
Auth0 имеет еще несколько функций в настройках, таких как установка ограничения времени входа в систему, разрешения на основе ролей и некоторые другие, вы можете прочитать больше в документации auth0.
Спасибо.