ИСТОРИЯ OAUTH: ОТ ПАРОЛЕЙ К МИРОВЫМ СТАНДАРТАМ
Вы видите это каждый день. Вы нажимаете «Войти через Google» или «Войти через GitHub». Вам не нужно вводить пароль. Вы мгновенно попадаете на сайт.
Это работает благодаря OAuth. Это мировой стандарт безопасности. Но начиналось всё не так. Он эволюционировал, чтобы решить масштабные проблемы.
Проблема с паролями
В ранние времена для каждого сайта приходилось создавать новый пароль. Это приводило к трем серьезным проблемам:
- Люди использовали один и тот же пароль везде. Если данные одного сайта утекали, под угрозой оказывались все аккаунты.
- Люди забывали пароли. Они тратили больше времени на нажатие кнопки «забыли пароль», чем на использование интернета.
- Веб-сайты видели ваш пароль в чистом виде. Если сайт взламывали, ваш пароль оказывался в руках злоумышленников.
Эволюция безопасности
Basic Auth: Вы отправляли имя пользователя и пароль с каждым запросом. Если вы не использовали HTTPS, хакеры могли видеть всё.
Session Cookies: Вы входили в систему один раз и получали ID сессии. Это было лучше, но куки (cookies) можно украсть с помощью таких атак, как XSS или CSRF. Кроме того, один сайт не мог использовать ваш вход для взаимодействия с другим сайтом.
API Keys: Вы давали веб-сайту специальный ключ. Это было лучше, так как вы не отправляли свой пароль. Однако API-ключи часто обладают избыточными полномочиями. Если вы даете API-ключ приложению, оно может получить право читать вашу почту, отправлять сообщения и удалять ваш аккаунт. Это всё равно что отдать ключ от машины отельному валет-парковщику, но этот же ключ открывает и ваш дом.
Решение OAuth: Ключ валет-парковщика
OAuth изменил правила игры. Вместо передачи пароля вы выдаете «токен». Представьте, что это ключ валет-парковщика. Ключ валет-парковщика позволяет водителю припарковать вашу машину, но не дает ему возможности открыть багажник или войти в ваш дом.
Как OAuth работает на практике:
- Вы хотите использовать Canva и подтянуть фотографии из Google.
- Canva запрашивает разрешение у Google.
- Google спрашивает вас: «Может ли Canva просматривать ваши фотографии?»
- Вы отвечаете: «Да, но только для просмотра. Не позволяйте им ничего удалять».
- Google выдает Canva определенный токен.
Canva никогда не видит ваш пароль от Google. Даже если хакер украдет этот токен, он сможет просматривать фотографии лишь в течение короткого времени. Он не сможет изменить ваш пароль или перевести ваши деньги.
Современная безопасность: PKCE
У мобильных и веб-приложений есть слабое место: они не могут надежно скрывать секреты. Чтобы решить эту проблему, мы используем PKCE (Proof Key for Code Exchange).
Это работает как система бронирования:
- Приложение создает секретный код (verifier).
- Приложение отправляет Google хешированную версию этого кода (challenge).
- Когда приложение запрашивает токен, оно отправляет исходный секретный код.
- Google проверяет, совпадает ли код с challenge.
Если они совпадают, Google понимает, что это то же самое приложение. Если нет — Google блокирует запрос. Это мешает хакерам украсть ваш код авторизации.
Дорожная карта OAuth
- 2007 (OAuth 1.0): Очень сложный протокол, использовавший тяжелую математику.
- 2012 (OAuth 2.0): Быстрее и проще. Использовал токены и требовал HTTPS.
- 2016 (OAuth 2.0 + PKCE): Добавлена безопасность для мобильных и современных веб-приложений.
- 2023 (OAuth 2.1): Новый золотой стандарт. Он удаляет старые, небезопасные методы.
Главный урок: Никогда не передавайте свой пароль другому приложению. Выдавайте им ограниченный по времени «билет». Так вы сохраните контроль.
Источник: https://dev.to/gophernment/oauth-elaaaebbprawatisaastr-cchaakrhasphaan-suumaatrthaanolk-16b4
