OAuth 2.0 — это стандарт, который позволяет сторонним приложениям безопасно получать доступ к данным из веб-приложений. Вы можете использовать его для получения данных, включая информацию о профиле, расписания и т. д. который размещен в других веб-приложениях, таких как Facebook, Google и GitHub. Служба может делать это от имени пользователя, не раскрывая его учетные данные стороннему приложению.

Узнайте, как реализовать OAuth в приложении Express, используя GitHub в качестве поставщика OAuth, выполнив несколько шагов.

Поток OAuth

В типичном потоке OAuth ваш сайт предоставляет пользователям возможность войти в систему со своей сторонней учетной записью от поставщика, такого как GitHub или Facebook. Пользователь может начать этот процесс, нажав соответствующую кнопку входа в систему OAuth.

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

instagram viewer

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

Реализация этого потока в приложении Express включает несколько шагов.

Шаг 1: Настройка среды разработки

Сначала создайте пустой каталог проекта и CD в созданный каталог.

Например:

mkdir github-приложение
CD github-приложение

Затем инициализируйте npm в своем проекте, выполнив:

инициализация npm -y

Эта команда создает пакет.json файл, содержащий сведения о вашем проекте, такие как имя, версия и т. д.

В этом руководстве будет показано использование модульной системы ES6. Настройте это, открыв свой пакет.json файл и указав "тип": "модуль" в JSON-объекте.

Шаг 2: Установка зависимостей

Вам нужно будет установить несколько зависимостей для правильной работы вашего сервера:

  • ExpressJS: ExpressJS — это платформа NodeJS, предоставляющая надежный набор функций для веб-приложений и мобильных приложений. Использование Express упростит процесс создания вашего сервера.
  • Axios: Axios — это HTTP-клиент на основе обещаний. Этот пакет понадобится вам для выполнения POST-запроса токена доступа к GitHub.
  • dotenv: dotenv — это пакет, который загружает переменные среды из файла .env в объект process.env. Он понадобится вам, чтобы скрыть важную информацию о вашем приложении.

Установите их, запустив:

нпм установить экспресс аксиос dotenv

Шаг 3: Создание экспресс-приложения

Тебе следует создать базовый экспресс-сервер для обработки и выполнения запросов к провайдеру OAuth.

Сначала создайте index.js файл в корневом каталоге вашего проекта, содержащий следующее:

// index.js
импорт выражать из "выражать";
импорт аксиомы из «аксиос»;
импорт * в качестве дотенв из "дотенв";
дотенв.config();

константа приложение = экспресс();
константа порт = процесс.env. ПОРТ || 3000

app.listen (порт, () => {
приставка.журнал(`Приложение работает на порту ${порт}`);
});

Этот код импортирует экспресс-библиотеку, создает экземпляр экспресс-экземпляра и начинает прослушивать трафик на порту. 3000.

Шаг 4: Создание обработчиков маршрутов

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

Первый обработчик маршрута должен перенаправить пользователя на https://github.com/login/oauth/authorize? параметры.

Вам нужно будет передать набор обязательных параметров URL-адресу GitHub OAuth, в том числе:

  • Идентификатор клиента: это идентификатор, который ваше приложение OAuth получает при регистрации на GitHub.
  • Область действия: это относится к строке, которая указывает объем доступа, который приложение OAuth имеет к информации пользователя. Вы можете найти список доступных областей в Документация GitHub по OAuth. Здесь вы будете использовать “читать: пользователь», которая предоставляет доступ для чтения данных профиля пользователя.

Добавьте следующий код в свой index.js файл:

// index.js
приложение.получить("/auth", (треб., реш.) => {
// Сохраняем параметры в объекте
константа параметры = {
сфера: "читать: пользователь",
ID клиента: процесс.env.ID КЛИЕНТА,
};

// Преобразование параметров в строку в кодировке URL
константа URLEncodedParams = новый URLSearchParams (params).toString();
res.redirect(` https://github.com/login/oauth/authorize?${urlEncodedParams}`);
});

Этот код реализует первый обработчик маршрута. Он сохраняет необходимые параметры в объекте, преобразовывая их в формат с кодировкой URL с помощью API URLSearchParams. Затем он добавляет эти параметры в URL-адрес OAuth GitHub и перенаправляет пользователя на страницу согласия GitHub.

Добавьте следующий код в свой index.js файл для второго обработчика маршрута:

// index.js
приложение.получить("/github-callback", (треб., реш.) => {
константа { код } = req.query;

константа тело = {
ID клиента: процесс.env.ID КЛИЕНТА,
client_secret: процесс.env.CLIENT_SECRET,
код,
};

позволять токен доступа;
const options = { заголовки: { принимаем: "приложение/json" } };

аксиомы
.почта("https://github.com/login/oauth/access_token", кузов, опции)
.тог((ответ) => ответ.данные.access_token)
.затем((токен) => {
AccessToken = токен;
res.redirect(`/?токен=${токен}`);
})
.ловить((ошибка) => res.status(500).json({ошибка: ошибка.сообщение}));
});

Второй обработчик маршрута извлечет код вернулся с GitHub в req.query объект. Затем он делает POST запрос с использованием Аксиос к " https://github.com/login/oauth/access_token" с кодом, ID клиента, а также client_secret.

В client_secret — это частная строка, которую вы создаете при создании приложения GitHub OAuth. Когда access_token успешно извлечен, он сохраняется в переменной для последующего использования. Наконец, пользователь перенаправляется в ваше приложение с access_token.

Шаг 5: Создание приложения GitHub

Далее вам нужно создать приложение OAuth на GitHub.

Сначала войдите в свою учетную запись GitHub, затем перейдите на Настройки, прокрутите вниз до Настройки разработчикаи выберите Приложения OAuth. Наконец, нажмите «Зарегистрировать новое приложение.”

GitHub предоставит вам новую форму приложения OAuth, подобную этой:

Заполните необходимые поля желаемыми данными. “URL домашней страницы" должно быть " http://localhost: 3000”. Ваш "URL-адрес обратного вызова для авторизации" должно быть " http://localhost: 3000/github-обратный вызов». Вы также можете дополнительно включить поток устройств, что позволит вам авторизовать пользователей для автономного приложения, такого как инструмент командной строки или менеджер учетных данных Git.

Поток устройств находится в общедоступной бета-версии и может быть изменен.

Наконец, нажмите на Зарегистрировать приложение кнопка.

GitHub направит вас на страницу с вашим ID клиента и возможность создать свой client_secret. Скопируйте свой ID клиента, создайте свой client_secret, и скопируйте его тоже.

Создайте файл .env и хранить ID клиента а также client_secret внутри него. Назовите эти переменные CLIENT_ID и CLIENT_SECRET соответственно.

Теперь ваш поток OAuth завершен, и теперь вы можете отправлять запросы с токеном доступа для чтения пользовательских данных (т. сфера вы указали ранее).

Важность OAuth 2.0

Использование OAuth 2.0 в вашем приложении значительно упрощает задачу реализации потока проверки подлинности. Он защищает пользовательские данные ваших клиентов с помощью стандарта Secure Sockets Layer (SSL), гарантируя, что они останутся конфиденциальными.