Проверяет понимание протоколов OAuth 2.0 и OpenID Connect и умение интегрировать внешнюю авторизацию в приложение без хранения паролей пользователей.
OAuth 2.0 решает задачу делегированного доступа: пользователь не отдаёт приложению свой пароль, а разрешает провайдеру выдать приложению ограниченный токен. OpenID Connect (OIDC) расширяет OAuth, добавляя аутентификацию — провайдер возвращает id token (JWT) с информацией о пользователе. Вместе они позволяют реализовать вход через Google, GitHub, Microsoft и другие сервисы.
Самый безопасный поток — Authorization Code Flow. Пользователь редиректится на провайдера, после согласия возвращается с кодом, который бэкенд обменивает на токены по защищённому каналу.
const express = require('express');
const fetch = require('node-fetch');
const app = express();
app.get('/login', (req, res) => {
const params = new URLSearchParams({
client_id: process.env.CLIENT_ID,
redirect_uri: 'http://localhost:3000/callback',
response_type: 'code',
scope: 'openid email profile',
state: 'random-csrf-token'
});
res.redirect('https://accounts.google.com/o/oauth2/v2/auth?' + params);
});
app.get('/callback', async (req, res) => {
const { code } = req.query;
const tokenRes = await fetch('https://oauth2.googleapis.com/token', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
code, client_id: process.env.CLIENT_ID,
client_secret: process.env.CLIENT_SECRET,
redirect_uri: 'http://localhost:3000/callback',
grant_type: 'authorization_code'
})
});
const tokens = await tokenRes.json();
// tokens.access_token, tokens.id_token
res.json(tokens);
});
app.listen(3000);SPA и мобильные приложения не могут хранить client_secret. Для них применяется PKCE: клиент генерирует code_verifier, отправляет его хеш (code_challenge) при логине и сам verifier при обмене кода. Это защищает от перехвата authorization code.
На бэкенде access token проверяется через introspection endpoint или как JWT по публичному ключу провайдера (JWKS). id token всегда проверяется как JWT: подпись, issuer, audience, срок действия.
OAuth/OIDC стоит применять, когда нужно быстро и безопасно добавить вход через внешние сервисы, не храня пароли и не реализуя собственную систему аутентификации. Для внутренних корпоративных систем часто используют Keycloak или Auth0 как единый identity provider.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию