Skip to content

Как настроить OAuth 2.0 provider

Коротко:

OAuth 2.0 provider setup позволяет "Login with Google/GitHub/VK" в вашем приложении. Для web: Authorization Code flow. Для SPA/mobile: Authorization Code + PKCE (RFC 7636). Процесс: регистрация OAuth app у provider, получение client_id + client_secret, redirect URI setup, обмен code на access_token, fetch user profile.

Ниже: пошаговая инструкция, рабочие примеры, типичные ошибки, FAQ.

Пошаговая настройка

  1. Выберите provider(s): Google, GitHub, VK, Yandex. Register OAuth app
  2. Настройте redirect URI (callback): https://example.com/oauth/callback
  3. Сохраните client_id и client_secret в env/secrets (не в git!)
  4. На login page генерируйте URL: https://provider.com/oauth/authorize?client_id=X&redirect_uri=...&scope=email&state=RANDOM
  5. Обрабатывайте callback: обменяйте code на access_token через provider token endpoint
  6. С access_token fetch user profile: GET https://provider.com/api/user
  7. Создайте/обновите local user, залогиньте. Храните refresh_token для перевыпуска

Рабочие примеры

СценарийКонфиг
Google OAuth — authorize URLhttps://accounts.google.com/o/oauth2/v2/auth?client_id=CLIENT_ID&redirect_uri=REDIRECT&scope=openid email profile&response_type=code&state=RANDOM
GitHub token exchangePOST https://github.com/login/oauth/access_token\n client_id=X&client_secret=Y&code=Z&redirect_uri=REDIRECT
PKCE для SPAcode_verifier = base64url(random(32)) code_challenge = base64url(sha256(code_verifier)) # authorize URL + code_challenge + code_challenge_method=S256
PHP pseudo-code (Authlib)$client = new GoogleClient($clientId, $secret); $url = $client->getAuthUrl($redirectUri); $token = $client->exchangeCode($_GET['code']); $user = $client->getUser($token);
State validationsession_start(); $_SESSION['oauth_state'] = bin2hex(random_bytes(16)); # в callback: hash_equals($_SESSION['oauth_state'], $_GET['state'])

Типичные ошибки

  • client_secret в JS/mobile-app — leak + attacker может выписать tokens
  • Без state parameter — CSRF attack (attacker triggers login на свой account)
  • Без PKCE для SPA/mobile — code interception возможен (например, через other app)
  • Accept любой email от provider — attacker регистрирует provider account с вашим email
  • Не verify email (email_verified=false в JWT) — можно spoof identity
ЗаголовкиCSP, HSTS, X-Frame-Options и др.
SSL/TLSШифрование и сертификат
КонфигурацияСерверные настройки и утечки
Оценка A-FОбщий балл безопасности

Почему нам доверяют

OWASP
рекомендации
15+
заголовков безопасности
<2с
результат
A–F
оценка безопасности

Как это работает

1

Введите URL сайта

2

Анализ заголовков безопасности

3

Получите оценку A–F

Что проверяет анализ безопасности?

Инструмент проверяет HTTP-заголовки безопасности, конфигурацию SSL/TLS, утечки серверной информации и защиту от распространённых атак (XSS, clickjacking, MIMEsniffing). Оценка от A до F показывает общий уровень защиты.

Анализ заголовков

Проверка Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy и других.

Проверка SSL

Версия TLS, срок сертификата, цепочка доверия, поддержка HSTS.

Обнаружение утечек

Поиск раскрытых серверных версий, debug-режимов, открытых конфигов и директорий.

Отчёт с рекомендациями

Детальный отчёт с объяснением каждой проблемы и конкретными шагами для исправления.

Кому это нужно

Специалисты по безопасности

аудит HTTP-заголовков

DevOps

проверка конфигурации

Разработчики

CSP и HSTS настройка

Аудиторы

соответствие стандартам

Частые ошибки

Нет Content-Security-PolicyCSP — главная защита от XSS. Без него инъекция скриптов значительно проще.
Нет заголовка HSTSБез HSTS возможна downgrade-атака с HTTPS на HTTP. Включите Strict-Transport-Security.
Server header раскрывает версиюServer: Apache/2.4.52 помогает атакующим подобрать эксплойт. Скройте версию.
X-Frame-Options не установленСайт можно встроить в iframe для clickjacking-атаки. Установите DENY или SAMEORIGIN.
Нет X-Content-Type-OptionsБез nosniff браузер может интерпретировать файлы неправильно (MIME sniffing).

Лучшие практики

Начните с базовых заголовковМинимум: HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy. Займёт 5 минут.
Внедрите CSP постепенноНачните с Content-Security-Policy-Report-Only, мониторьте нарушения, затем включите.
Скройте серверные заголовкиУдалите Server, X-Powered-By, X-AspNet-Version из ответов.
Настройте Permissions-PolicyОграничьте доступ к камере, микрофону, геолокации — только то, что реально используется.
Проверяйте после каждого деплояЗаголовки безопасности могут быть перезаписаны при обновлении конфигурации сервера.

Получите больше с бесплатным аккаунтом

История security-проверок и мониторинг HTTP-заголовков безопасности.

Зарегистрироваться (FREE)

Больше по теме

Часто задаваемые вопросы

OAuth 2.0 vs OpenID Connect?

OAuth 2.0 — только authorization. OpenID Connect — identity layer поверх OAuth, возвращает <code>id_token</code> (JWT) с user claims.

Implicit flow ещё используется?

Нет, deprecated с 2019. Всегда Authorization Code + PKCE для SPA/mobile.

Refresh token где хранить?

Server-side (session/database). Никогда в localStorage/cookie доступном JS. Only httpOnly cookie или server storage.

Как тестировать OAuth flow?

postmaster.google.com → OAuth 2.0 Playground. Или <a href="/jwt">Enterno JWT decoder</a> для inspect access_token.