JavaRush /Курсы /Модуль 4: FastAPI /Что такое OAuth2: основные концепции

Что такое OAuth2: основные концепции

Модуль 4: FastAPI
4 уровень , 0 лекция
Открыта

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

Давайте начнём с постановки проблемы. Представьте, что вы хотите протестировать сторонний API, который требует ваших данных (например, доступ к профилю в Google). Вы, конечно, не хотите раздавать свои данные направо и налево. Вот тут на сцену выходит OAuth2 – это протокол, который позволяет предоставлять сторонним приложениям доступ к вашим данным без необходимости делиться паролем. Удобно? Еще бы!

OAuth2 (OAuth 2.0) – это протокол авторизации, который позволяет одному приложению (называемому клиентом) получить ограниченный доступ к ресурсам другого приложения (ресурсного сервера) от имени пользователя, не передавая непосредственно его пароль. Этот протокол стал стандартом в безопасности современных веб-приложений.

Аутентификация и авторизация: в чём разница?

Прежде чем двигаться дальше, стоит вспомнить, что аутентификация и авторизация – это не одно и то же.

  • Аутентификация (authentication) – процесс подтверждения личности пользователя (например, "Вы действительно [ваше имя пользователя]?").
  • Авторизация (authorization) – процесс определения, что пользователь может делать ("Вы действительно можете просматривать эту страницу или обращаться к этому API?").

OAuth2 отвечает именно за авторизацию, хотя его можно использовать и для аутентификации, но об этом чуть позже.


Компоненты OAuth2

OAuth2 – это как пьеса, в которой у каждого участника своя роль. Вот основные "актёры":

  1. Клиент (Client):
    это приложение, которое хочет получить доступ к ресурсам пользователя. Например, ваш любимый мобильный клиент для работы с календарем.
  2. Сервер авторизации (Authorization Server):
    это сервер, который обрабатывает запросы на авторизацию. Он проверяет, может ли клиент получить доступ, и, если всё в порядке, выдаёт токены.
  3. Ресурсный сервер (Resource Server):
    сервер, который владеет данными, к которым клиент хочет получить доступ. Например, сервер с вашим профилем в Google.
  4. Владелец ресурса (Resource Owner):
    это пользователь, который владеет данными. Например, это вы, когда даёте разрешение приложению работать с вашим профилем.

Процесс взаимодействия

Взаимодействие между участниками можно представить как танец, состоящий из нескольких шагов:

  1. Запрос разрешения:
    клиент обращается к серверу авторизации и просит пользователя предоставить доступ к его ресурсам.
  2. Предоставление доступа:
    пользователь предоставляет разрешение (например, через страницу входа или диалоговое окно).
  3. Выдача токена:
    сервер авторизации выдает клиенту токен доступа (Access Token), который клиент может использовать для доступа к ресурсам.
  4. Запрос к ресурсам:
    клиент использует токен доступа для запросов к ресурсному серверу.

Типы grant-ов: как клиенты "выпрашивают" доступ?

"Grant" – это механизм, который описывает, как клиент получает токен. Вот самые популярные типы grant-ов:

  1. Authorization Code Grant (авторизационный код):
    используется для серверных приложений. Клиент перенаправляет пользователя на сервер авторизации, где он вводит свои данные, а затем сервер возвращает клиенту специальный код, который можно обменять на токен.
    В качестве примера можно взять авторизацию через Google OAuth.
  2. Implicit Grant:
    более упрощённый вариант для клиентских приложений, где токен выдаётся напрямую. Однако этот метод считается устаревшим и небезопасным, поскольку токен может быть перехвачен в URL.
  3. Resource Owner Password Credentials Grant:
    клиент напрямую принимает имя пользователя и пароль, чтобы получить доступ. Используется редко, так как требуется вводить пароль стороннему приложению. Подходит только для доверенных приложений.
  4. Client Credentials Grant:
    используется для авторизации серверов без участия пользователя. Например, один микросервис авторизуется перед другим или для доступа к данным, которые принадлежат самому приложению, а не конкретному пользователю.

Примеры использования OAuth2

Google активно использует OAuth2. Например, когда вы хотите подключить стороннее приложение к своему Google-аккаунту, процесс выглядит так:

  1. Выводится страница авторизации Google (доступна только через HTTPS, чтобы данные были в безопасности).
  2. После успешного входа пользователь подтверждает доступы (например, к Google Drive).
  3. Приложение получает токен и использует его для работы с API Google.

А вообще – подумайте обо всех "Войти с помощью..." кнопках, которые вы видели (например, "Войти с помощью Facebook"). Эти кнопки – реальное применение OAuth2.

Если говорить о FastAPI, то встроенная поддержка OAuth2 позволяет легко интегрировать этот механизм для вашего API. Мы с вами ещё настроим такую авторизацию в следующей лекции! Спойлер: будет интересно.


Преимущества OAuth2

Почему же OAuth2 стал таким популярным?

  • Минимизация риска утечек пароля:
    Клиенты не видят и не хранят пароль пользователя, они работают только с токенами.
  • Гибкость в доступе:
    Можно настроить доступ на уровне "что можно", "что нельзя". Например, клиент получает разрешение только на чтение данных, но не на их запись.
  • Единый вход (Single Sign-On):
    Пользователь может использовать одну учетную запись для авторизации в разных системах.
  • Широкое применение:
    Поддерживается большинством крупных сервисов (Google, Facebook, GitHub и т.д.).

Резюме

OAuth2 – это мощный инструмент для авторизации, который позволяет делиться доступом к данным пользователя безопасным образом. Мы рассмотрели его основные концепции и участников, а также узнали, что аутентификация и авторизация – это разные вещи. В следующих лекциях мы погрузимся глубже в тему токенов и начнём применять эти знания в реальном приложении.

Просто подумайте: в каждый раз, когда вы используете "Войти с помощью Google" или "Войти через Facebook", вы уже взаимодействуете с OAuth2. А теперь представьте, что вы сможете внедрить это в собственное приложение. Это как стать магом, который управляет доступом, только вместо волшебной палочки – код на Python!

1
Задача
Модуль 4: FastAPI, 4 уровень, 0 лекция
Недоступна
Установите библиотеку для работы с OAuth2
Установите библиотеку для работы с OAuth2
1
Задача
Модуль 4: FastAPI, 4 уровень, 0 лекция
Недоступна
Симуляция процесса получения токена
Симуляция процесса получения токена
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ