awesome-everything EN
↑ Обратно к восхождению

Безопасность

Что такое OAuth и почему пароли — не ответ

Суть OAuth делегирует доступ без передачи паролей. Три стороны, два токена, одна модель доверия — объяснено через метафору выгульщика собак.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на junior-высоте — поверхность
◷ 7 min

Приложение для печати фото просит тебя “подключить Google Drive”. Ты вводишь свой пароль Google прямо в их форму. Теперь это приложение может читать каждый файл, письмо и фото в твоём аккаунте — навсегда. Одна утечка PrintPic — и все сервисы, подключённые через Google, скомпрометированы. OAuth существует потому, что это неправильный способ делиться доступом.

Три стороны

Каждый OAuth flow вовлекает три стороны:

  1. Клиент (твоё приложение, например PrintPic). Хочет ограниченного доступа к ресурсу от имени пользователя. Никогда не видит пароль пользователя.
  2. Authorization server (identity provider, например Google). Аутентифицирует пользователя, выдаёт токены. Единственная сторона, хранящая пароль.
  3. Resource server (API, например Google Drive). Принимает токены для обработки запросов. Валидирует токены через authorization server.
Модель доверия трёх сторон OAuth
Клиент (App)
PrintPic — хочет загружать фото. Никогда не видит пароль. Держит access-токен.
Authorization Server
Google — держит пароль. Выдаёт access + ID-токены после согласия пользователя.
Resource Server
Google Drive — отдаёт файлы. Валидирует access-токены. Ничего не знает о пароле.
Пароль живёт только на authorization server. Токены текут к двум другим сторонам.

Метафора выгульщика собак

Ты нанимаешь выгульщика собак. Ты не даёшь ему ключ от дома. Вместо этого идёшь в key kiosk (authorization server) и говоришь “Фрэнк может выгуливать собаку по вторникам 9–10”. Киоск печатает Фрэнку single-use карту, открывающую только заднюю калитку, только по вторникам, только на час. Фрэнк потерял карту — без проблем, отзываешь в киоске. Карта — это access-токен. Задняя калитка — resource API.

Два токена, два назначения

Успешный OAuth + OpenID Connect flow выдаёт два разных токена:

  • Access token — авторизует API-вызовы. Клиент отправляет его в заголовке Authorization: Bearer. Говорит “держатель вправе делать X”. Resource server принимает его без знания identity пользователя.
  • ID token — доказывает кто пользователь (слой OpenID Connect). Всегда JWT. Содержит claims вроде sub (стабильный user ID), email, name. Клиент читает его, чтобы знать кто только что вошёл. Никогда не отправляется в API.

Access-токен отвечает: “может ли это приложение делать X?” ID-токен отвечает: “кто пользователь?”

Викторина

Почему OAuth безопаснее, чем отдать приложению username и пароль?

Викторина

В чём разница между access-токеном и OpenID Connect ID-токеном?

Расставь шаги по порядку

Поставь шаги 'Sign in with Google' в порядке:

  1. 1 Пользователь кликает 'Sign in with Google' в приложении
  2. 2 Приложение редиректит браузер на /authorize эндпоинт Google
  3. 3 Пользователь логинится в Google и одобряет запрошенные scope
  4. 4 Google редиректит браузер обратно в приложение с one-time кодом
  5. 5 Сервер приложения обменивает код на access-токен и ID-токен на /token эндпоинте Google
  6. 6 Приложение верифицирует подпись ID-токена и читает identity claims пользователя
Вспомните перед уходом
  1. 01
    Назови три стороны OAuth flow и по одному предложению о каждой.
  2. 02
    В чём разница между access-токеном и ID-токеном?
  3. 03
    Почему кража токена менее катастрофична, чем кража пароля?
Итог

OAuth решает проблему передачи учётных данных: вместо того чтобы отдавать пароль каждому приложению, ты авторизуешь identity provider выдать short-lived scoped токен. Три стороны — клиент, authorization server, resource server — делят доверие так, что ни одна не нуждается в доверии всем остальным. OpenID Connect добавляет identity-слой через подписанный ID-токен. Украденный токен имеет scope, short-lived и отзываем; украденный пароль — нет.

Связанные уроки
углубляется в
встречается в202
Продолжить восхождение ↑Authorization code flow с PKCE
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.