Обзор библиотек OAuth клиента для JavaScript (Node.js)
OAuth (Open Authorization) — это открытый протокол авторизации, который позволяет предоставить третьей стороне ограниченный доступ к ресурсам пользователя без передачи логина и пароля. В экосистеме Node.js существует несколько зрелых библиотек, реализующих OAuth 2.0 и OAuth 1.0a. В этой статье мы рассмотрим три самых популярных решения: simple-oauth2, oauth4webapi и Passport.js с его стратегиями. Вы узнаете, как выбрать подходящий инструмент и как интегрировать его в ваш проект.
1. simple-oauth2 — универсальный OAuth 2.0 клиент
simple-oauth2 — это легковесная библиотека, которая предоставляет чистый API для работы с OAuth 2.0. Она поддерживает все основные гранты (authorization code, client credentials, password, refresh token). Идеально подходит для серверных приложений, где нужен полный контроль над процессом.
Установка
npm install simple-oauth2
Пример: авторизация через GitHub
const express = require('express');
const simpleOAuth2 = require('simple-oauth2');
const app = express();
const config = {
client: {
id: 'ВАШ_CLIENT_ID',
secret: 'ВАШ_CLIENT_SECRET'
},
auth: {
tokenHost: 'https://github.com',
tokenPath: '/login/oauth/access_token',
authorizePath: '/login/oauth/authorize'
}
};
const oauth2 = new simpleOAuth2.ClientCredentials(config);
// Маршрут для начала авторизации
app.get('/auth/github', (req, res) => {
const authorizationUri = oauth2.authorizeURL({
redirect_uri: 'http://localhost:3000/callback',
scope: 'user:email'
});
res.redirect(authorizationUri);
});
// Callback маршрут
app.get('/callback', async (req, res) => {
const { code } = req.query;
try {
const result = await oauth2.getToken({
code,
redirect_uri: 'http://localhost:3000/callback'
});
const accessToken = oauth2.createToken(result);
console.log('Access Token:', accessToken.token.access_token);
res.send('Авторизация прошла успешно!');
} catch (error) {
console.error('Ошибка получения токена', error);
res.status(500).send('Ошибка авторизации');
}
});
app.listen(3000, () => console.log('Сервер запущен на порту 3000'));
2. oauth4webapi — современный стандарт
oauth4webapi — это реализация последних спецификаций OAuth 2.0 и OpenID Connect. Библиотека не имеет внешних зависимостей, поддерживает PKCE (Proof Key for Code Exchange) и работу с JWK (JSON Web Keys). Рекомендуется для новых проектов, где важна безопасность и соответствие стандартам.
Установка
npm install oauth4webapi
Пример: авторизация с PKCE
const express = require('express');
const { AuthorizationServer, Client, generateCodeVerifier, generateCodeChallenge } = require('oauth4webapi');
const app = express();
// Конфигурация сервера авторизации (Google)
const issuer = new URL('https://accounts.google.com');
const server = new AuthorizationServer(issuer);
const client = new Client({
client_id: 'ВАШ_CLIENT_ID',
client_secret: 'ВАШ_CLIENT_SECRET',
redirect_uris: ['http://localhost:3000/callback']
});
app.get('/auth/google', async (req, res) => {
const codeVerifier = generateCodeVerifier();
const codeChallenge = await generateCodeChallenge(codeVerifier);
// Сохраняем codeVerifier в сессии
req.session.codeVerifier = codeVerifier;
const authorizationUrl = new URL(server.authorization_endpoint);
authorizationUrl.searchParams.set('client_id', client.client_id);
authorizationUrl.searchParams.set('redirect_uri', client.redirect_uris[0]);
authorizationUrl.searchParams.set('response_type', 'code');
authorizationUrl.searchParams.set('scope', 'openid profile email');
authorizationUrl.searchParams.set('code_challenge', codeChallenge);
authorizationUrl.searchParams.set('code_challenge_method', 'S256');
res.redirect(authorizationUrl.toString());
});
app.get('/callback', async (req, res) => {
const { code } = req.query;
const codeVerifier = req.session.codeVerifier;
try {
const tokenResponse = await client.authorizationCodeGrant(
server,
client,
code,
client.redirect_uris[0],
codeVerifier
);
console.log('ID Token:', tokenResponse.id_token);
res.send('Авторизация через Google успешна!');
} catch (error) {
console.error('Ошибка:', error);
res.status(500).send('Ошибка авторизации');
}
});
app.listen(3000);
3. Passport.js — фреймворк аутентификации
Passport.js — это не просто OAuth клиент, а полноценный фреймворк для аутентификации в Express-приложения
Также в библиотеке
Работа с ZIP/архивами в Swift (iOS/macOS): полное руководство
Очереди задач в Swift: GCD, OperationQueue и Combine для iOS/macOS
Observation для Swift: полное руководство с примерами
Работа с Excel в C# (.NET): библиотеки EPPlus, ClosedXML и NPOI