Введение

Единый вход (SSO) — это механизм, который позволяет пользователям один раз аутентифицироваться и беспрепятственно получать доступ к нескольким приложениям без необходимости многократно вводить свои учетные данные. Okta — это облачная платформа управления идентификацией, которая предоставляет возможности единого входа для веб-приложений и мобильных приложений.

В этом руководстве вы узнаете, как шаг за шагом интегрировать Okta SSO в приложение Node.js с примерами кода.

Предпосылки

Прежде чем начать, вам потребуются следующие предварительные условия:

  1. Базовое понимание Node.js и Express.js
  2. Node.js установлен на вашем компьютере
  3. Бесплатная учетная запись разработчика Okta

Шаг 1. Создайте новое приложение Node.js

Первый шаг — создать новое приложение Node.js. Откройте терминал и выполните следующие команды:

$ mkdir okta-sso-demo
$ cd okta-sso-demo
$ npm init -y

Эти команды создают новый каталог для вашего приложения Node.js, переходят к нему и инициализируют новый проект Node.js с настройками по умолчанию.

Шаг 2. Установите зависимости

Следующим шагом будет установка зависимостей, необходимых для вашего приложения Node.js. Выполните следующую команду:

$ npm install express express-session @okta/oidc-middleware ejs

Эти зависимости включают в себя:

  1. экспресс: веб-фреймворк для Node.js
  2. express-session: ПО промежуточного слоя для управления сеансами пользователей в Express.js.
  3. @okta/oidc-middleware: Okta SDK для Node.js
  4. ejs: механизм шаблонов для создания HTML-страниц.

Шаг 3. Настройте приложение Okta

Следующий шаг — создать приложение Okta и настроить его для вашего приложения Node.js. Войдите в свою учетную запись разработчика Okta и выполните следующие действия:

  1. Нажмите «Приложения» в верхней строке меню, а затем нажмите «Добавить приложение».
  2. Выберите «Интернет» в качестве платформы и «Одностраничное приложение» в качестве метода входа.
  3. Введите имя для вашего приложения и нажмите «Далее».
  4. Введите http://localhost:3000/login/callback в качестве URI перенаправления входа и http://localhost:3000 в качестве URI перенаправления выхода. Нажмите Готово.
  5. Обратите внимание на «Идентификатор клиента» и «Секрет клиента» вашего приложения. Вы будете использовать их в своем приложении Node.js.

Шаг 4. Внедрение конфигурации Okta

Следующим шагом будет реализация конфигурации Okta в вашем приложении Node.js. Создайте новый файл с именем «okta.js» в корневом каталоге вашего приложения Node.js и добавьте следующий код:

const session = require('express-session');
const OktaAuth = require('@okta/oidc-middleware').OktaAuth;

const oktaAuth = new OktaAuth({
  clientId: 'YOUR_CLIENT_ID',
  clientSecret: 'YOUR_CLIENT_SECRET',
  issuer: 'https://YOUR_OKTA_DOMAIN.okta.com/oauth2/default',
  appBaseUrl: 'http://localhost:3000',
  scope: ['openid', 'email', 'profile'],
});

function oktaMiddleware(req, res, next) {
  const { token } = req.session;

  if (!token) {
    return res.redirect('/login');
  }

  oktaAuth.token.verify(token)
    .then((jwt) => {
      req.userContext = { token, jwt };
      next();
    })
    .catch(() => {
      res.redirect('/login');
    });
}

module.exports = {
  oktaAuth,
  oktaMiddleware,
};

Этот файл инициализирует объект OktaAuth с идентификатором клиента, секретом клиента, URL-адресом издателя Okta, базовым URL-адресом приложения и требуемыми областями. Функция oktaMiddleware проверяет, есть ли у пользователя токен доступа в сеансе. Если пользователь не аутентифицирован, промежуточное ПО перенаправляет пользователя на страницу входа. Если пользователь аутентифицирован, ПО промежуточного слоя устанавливает пользовательский контекст с токеном доступа и JWT и передает управление следующему ПО промежуточного слоя.

Шаг 5. Внедрение маршрута входа

Следующим шагом является реализация маршрута входа в ваше приложение Node.js. Создайте новый файл с именем «routes.js» в корневом каталоге вашего приложения Node.js и добавьте следующий код:

const { Router } = require('express');
const { oktaAuth } = require('./okta');

const router = Router();

router.get('/login', (req, res) => {
  res.render('login', {
    csrfToken: req.csrfToken(),
    title: 'Login',
  });
});

router.post('/login', oktaAuth.authenticate(), (req, res) => {
  res.redirect('/');
});

router.get('/login/callback', oktaAuth.callback(), (req, res) => {
  const { sessionToken } = req.userContext.tokens;

  req.session.token = sessionToken;
  res.redirect('/');
});

router.get('/logout', (req, res) => {
  req.session.destroy();
  req.logout();
  res.redirect('/');
});

module.exports = router;

Этот файл определяет маршруты входа, обратного вызова и выхода для вашего приложения Node.js. Маршрут входа отображает страницу входа с токеном CSRF для обеспечения безопасности. Почтовый запрос к маршруту входа использует промежуточное ПО аутентификации Okta для аутентификации пользователя с помощью Okta. Маршрут обратного вызова использует промежуточное ПО обратного вызова Okta для получения маркера доступа от Okta и сохранения его в сеансе пользователя. Маршрут выхода уничтожает сеанс пользователя и выводит пользователя из Okta.

Шаг 6. Внедрение домашнего маршрута

Следующим шагом является реализация домашнего маршрута в вашем приложении Node.js. Создайте новый файл с именем «index.js» в корневом каталоге вашего приложения Node.js и добавьте следующий код:

const express = require('express');
const csrf = require('csurf');
const session = require('express-session');
const { oktaMiddleware } = require('./okta');
const routes = require('./routes');

const app = express();
const csrfProtection = csrf();

app.set('view engine', 'ejs');

app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(session({
  secret: 'SECRET_KEY',
  resave: true,
  saveUninitialized: false,
}));
app.use(csrfProtection);
app.use(oktaMiddleware);
app.use('/', routes);

app.listen(3000, () => {
  console.log('Server started on port 3000');
});

Этот файл инициализирует приложение Express.js с механизмом просмотра, парсером тела, промежуточным ПО сеанса, промежуточным ПО защиты CSRF, промежуточным ПО Okta и промежуточным ПО маршрутов. Промежуточное ПО CSRF добавляет токен CSRF ко всем формам для обеспечения безопасности. Промежуточное ПО Okta защищает маршруты, требующие аутентификации.

Шаг 7. Создайте страницу входа

Следующим шагом является реализация страницы входа для вашего приложения Node.js. Создайте новый файл с именем «login.ejs» в каталоге «views» вашего приложения Node.js.

Заключение

В этом сообщении блога вы узнали, как шаг за шагом интегрировать Okta SSO в ваше приложение Node.js. Сначала вы создали учетную запись разработчика Okta и зарегистрировали свое приложение. Затем вы установили необходимые зависимости и инициализировали объект OktaAuth в своем приложении Node.js. Вы также реализовали маршруты входа, обратного вызова и выхода и защитили их с помощью промежуточного программного обеспечения проверки подлинности Okta. Наконец, вы реализовали страницу входа и домашнюю страницу для своего приложения Node.js.

SSO — это мощный механизм безопасности, обеспечивающий беспрепятственную аутентификацию для ваших пользователей. Интегрировав Okta SSO в свое приложение Node.js, вы можете обеспечить безопасный и простой в использовании процесс аутентификации для своих пользователей.

Создавайте приложения с повторно используемыми компонентами, как Lego

Инструмент с открытым исходным кодом Bit помогает более чем 250 000 разработчиков создавать приложения с компонентами.

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

Подробнее

Разделите приложения на компоненты, чтобы упростить разработку приложений, и наслаждайтесь наилучшими возможностями для рабочих процессов, которые вы хотите:

Микро-интерфейсы

Система дизайна

Совместное использование кода и повторное использование

Монорепо

Узнать больше: