Что такое OAuth
Что проверяют
Для аналитика вопрос не про код, а про то, сможете ли вы описать интеграцию в требованиях: кто кому что доверяет, какие участники есть в схеме, что лежит в токене и как формулировать права. Заодно проверяют, отличаете ли вы аутентификацию от авторизации.
Как отвечать
OAuth 2.0 это фреймворк делегированной авторизации. Он позволяет приложению получить ограниченный доступ к данным пользователя в другом сервисе, не узнав его пароль. Участников четыре: владелец ресурса (пользователь), клиент (приложение), сервер авторизации (выдаёт токены), сервер ресурсов (проверяет токен и отдаёт данные).
Сценарий, который обычно и просят описать:
- клиент отправляет пользователя на сервер авторизации со списком запрошенных прав (scope);
- пользователь входит и подтверждает согласие;
- сервер возвращает одноразовый код на заранее зарегистрированный адрес возврата;
- клиент меняет код на токен доступа и токен обновления по серверному каналу;
- сервер ресурсов принимает запрос с токеном и сверяет права.
Зрелость ответа добавляют детали: PKCE обязателен для мобильных и браузерных клиентов и рекомендован остальным, параметр state защищает от подделки запроса, адрес возврата сверяется точным совпадением, поток client_credentials закрывает интеграции без пользователя, а неявный поток и передача пароля клиенту считаются устаревшими.
Где спотыкаются
Называют OAuth протоколом аутентификации и описывают вход через внешнего провайдера как его штатную функцию. Личность пользователя приносит надстройка OpenID Connect со своим токеном; принимать токен доступа за доказательство входа небезопасно, он выдан для другого сервиса и о пользователе ничего не утверждает.
Путают токены в требованиях. Токен доступа короткоживущий и предъявляется серверу ресурсов, токен обновления живёт долго, хранится в защищённом хранилище клиента и меняется на новый доступ. Сроки жизни, правила ротации и сценарий отзыва задаются явно, иначе их придумает разработчик.
Описывают только счастливый путь. В постановке нужны отказ в согласии, истёкший и отозванный токен, нехватка прав с отдельным кодом ответа и поведение при недоступности сервера авторизации.