Аутентификация и авторизация (OAuth2 / JWT)

OAuth2, JWT

Что это такое

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

Почему это важно

Последствия здесь самые тяжёлые: сервис, который корректно аутентифицирует и небрежно авторизует, позволяет любому вошедшему пользователю читать данные любого другого — это уже утечка, а не баг. Сами протоколы к тому же легко использовать так, что выглядит правильно, однако на деле это не так: токены, которые никогда не истекают; подписи, которые не проверяют; области доступа, которые игнорируют. Понимание потоков и шагов проверки — то, что отличает работающую проверку токена от той, которую можно обойти.

Что в этом треке

  1. Аутентификация и потоки OAuth2 (05-backend-data/10-authentication-authorization-oauth2-jwt/01-authentication-and-oauth2-flows) — кто выдаёт учётные данные, где хранит их каждая сторона и какой поток подходит какому виду клиента.
  2. Проверка JWT и авторизация (05-backend-data/10-authentication-authorization-oauth2-jwt/02-jwt-verification-and-authorization) — как проверить подпись и утверждения токена и превратить их в решение по конкретному запросу.

Предварительные требования

Что читать дальше

  • RESTful API (05-backend-data/06-restful-api) — эндпоинты, на которые распространяется эта защита, поэтому читайте в первую очередь.
  • Безопасность в облаке и IAM (06-cloud-devops/12-cloud-security-iam) — те же два вопроса, только на уровне облачной инфраструктуры, а не отдельных пользователей.
  • Веб-безопасность (OWASP Top 10) (07-security/01-web-security-owasp-top-10) — нарушенный контроль доступа и другие способы атаковать API.