← Назад к вопросам

Что такое авторизация OAuth 2.0?

2.0 Middle🔥 161 комментариев
#JavaScript Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое OAuth 2.0?

OAuth 2.0 (Open Authorization 2.0) — это современный, широко распространенный протокол авторизации, который позволяет веб-приложениям и сервисам безопасно получать ограниченный доступ к данным пользователя на других сервисах (например, Google, Facebook, GitHub) без необходимости раскрывать пароль пользователя. Это ключевой механизм для реализации функций "Войти через Facebook/Google" и интеграции API сторонних услуг.

Ключевая идея OAuth 2.0 — это делегирование доступа. Вместо того чтобы пользователь делился своими учетными данными (логин/пароль) с клиентским приложением, он дает этому приложению разрешение действовать в его интересах на защищенном ресурсе (сервисе данных). Это разрешение оформляется в виде токена доступа (Access Token) — специального ключа, который приложение может использовать для выполнения конкретных действий.

Основные роли (actors) в потоке OAuth 2.0

В протоколе четко определены четыре ключевые роли:

  • Resource Owner (владелец ресурса) — это конечный пользователь, который владеет данными (например, его профилем на Google) и может разрешить приложению доступ к ним.
  • Client (клиент) — это приложение (веб-сайт, мобильное приложение), которое хочет получить доступ к данным пользователя.
  • Resource Server (сервер ресурсов) — это API или сервис, который хранит защищенные данные пользователя (например, API Google Диска).
  • Authorization Server (сервер авторизации) — это сервис, который выдает токены после успешной аутентификации владельца ресурса и получения его согласия. Часто он является частью сервиса владельца ресурса (например, accounts.google.com).

Типичный поток авторизации (Authorization Code Flow)

Это самый распространенный и безопасный поток для веб-приложений. Он выглядит так:

  1. Пользователь в клиентском приложении нажимает "Войти через Google".
  2. Клиент направляет пользователя на сервер авторизации (Google) с запросом, содержащим свои идентификационные данные (client_id), запрашиваемые права (scope) и URL для возврата (redirect_uri).
    GET https://accounts.google.com/o/oauth2/v2/auth?
        response_type=code&
        client_id=ВАШ_CLIENT_ID&
        redirect_uri=https://your-app.com/callback&
        scope=profile email&
        state=xyz
    
  3. Сервер авторизации аутентифицирует пользователя (если он не залогинен) и показывает ему экран согласия: "Приложение X хочет получить доступ к вашему профилю и email. Разрешить?"
  4. Если пользователь соглашается, сервер авторизации перенаправляет его обратно на redirect_uri клиента, добавляя в URL код авторизации (Authorization Code).
    GET https://your-app.com/callback?code=4/P7q7W91&state=xyz
    
  5. Клиент (его backend-сервер) получает этот код и отправляет его вместе со своим секретным ключом (client_secret) на сервер авторизации для получения токена доступа (Access Token).
    // Пример запроса с фронтенда (используя fetch)
    fetch('https://oauth2.googleapis.com/token', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
            code: '4/P7q7W91',
            client_id: 'ВАШ_CLIENT_ID',
            client_secret: 'ВАШ_CLIENT_SECRET',
            redirect_uri: 'https://your-app.com/callback',
            grant_type: 'authorization_code'
        })
    });
    
  6. Сервер авторизации проверяет код и секрет, затем возвращает клиенту Access Token (и часто Refresh Token).
    {
        "access_token": "ya29.a0AfH6SMB...",
        "token_type": "Bearer",
        "expires_in": 3600,
        "refresh_token": "1//0eK...",
        "scope": "profile email"
    }
    
  7. Теперь клиент может использовать этот access_token для обращения к серверу ресурсов (например, к API Google для получения данных профиля).
    fetch('https://www.googleapis.com/userinfo/v2/me', {
        headers: {
            'Authorization': 'Bearer ya29.a0AfH6SMB...'
        }
    });
    

Почему OAuth 2.0 критически важен для Frontend Developer?

  • Безопасность: Мы никогда не работаем с паролями пользователя напрямую. Клиентское приложение видит только временный код или токен, который имеет ограниченные права и срок жизни. Это сводит к минимуму риски.
  • User Experience: Пользователям не нужно создавать новые учетные записи на каждом сайте. Они используют уже существующие и доверенные аккаунты.
  • Интеграции: Мы можем создавать мощные приложения, которые объединяют данные и функции из разных источников (например, отображать календарь Google в нашей CRM-системе).
  • Спецификация и библиотеки: Протокол стандартизирован, что позволяет использовать готовые, проверенные библиотеки на фронтенде (например, oauth2-client для JS) и бэкенде, уменьшая объем собственной реализации.

Для фронтенд★ разработчика понимание OAuth 2.0 означает знание:

  • Как правильно настроить перенаправление (redirect) и обработку ответа с кодом.
  • Как безопасно хранить и передавать токены (не в localStorage для избежания XSS, лучше в httpOnly cookies или использовать backend для token exchange).
  • Различия между публичными клиентами (SPA, мобильные приложения) и конфиденциальными клиентами (серверные приложения) и выбор соответствующего потока (Authorization Code Flow с PKCE для SPA).

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

Что такое авторизация OAuth 2.0? | PrepBro