Я скоро вернусь к вашему вопросу, но сначала позвольте мне сказать несколько предварительных замечаний.
Oauth - это авторизация, а не аутентификация.Измените «authenticate» на «authorize» в вашем вопросе.
Это не клиент, который нажимает «разрешить доступ», это пользователь.Суть Oauth заключается в том, что пользователь хочет предоставить клиенту доступ к некоторым его данным без предоставления своего пароля клиенту.Oauth позволяет ему делать это с помощью браузера, которому он доверяет, так что пользователь может чувствовать себя в безопасности при использовании клиента.
Без протокола Ouath единственный способ, которым он мог бы сделать это, - предоставить свой парольклиенту.Представьте себе, множество клиентов, которые вы используете каждый день, хотят получить доступ к вашим данным Facebook - без Oauth вам придется вводить свои учетные данные Facebook в этих клиентах, что даст им полный доступ ко всем вашим Facebook.Вы бы чувствовали себя комфортно с этим?Вы не должны этого делать, потому что это откроет дверь для всех видов вредоносных программ.Oauth позволяет ограничить доступ этих клиентов к вашей учетной записи Facebook (или любой другой учетной записи), чтобы вы могли быть уверены в используемом вами приложении.
Теперь к вашему вопросу - риск кодав URL.Это действительно действительная проблема, но она предназначена для одноразового использования (она обменивается на токен доступа для многократного использования) и имеет короткий срок службы.Причина использования кода авторизации объясняется в разделе 3.4 модели угроз Oauth .Точная проблема, о которой вы спрашиваете, рассмотрена в Разделе 4.4.1.1 модели угроз Oauth :
o Согласно базовой спецификации OAuth, серверу авторизации, а такжеклиент должен гарантировать, что эти передачи защищены с использованием механизмов транспортного уровня, таких как TLS (см. раздел 5.1.1).
o Сервер авторизации будет требовать от клиента аутентификации везде, где это возможно, так что привязка авторизации«код» для определенного клиента может быть проверен надежным способом (см. раздел 5.2.4.4).
o Использовать короткое время истечения для «кодов» авторизации (раздел 5.1.5.3).
o Сервер авторизации должен применять одноразовое ограничение использования (см. Раздел 5.1.5.4).
o Если сервер авторизации наблюдает несколько попыток выкупить «код» авторизации, сервер авторизации может захотеть отозватьвсе токены, выданные на основе «кода» авторизации (см. раздел 5.2.1.1).
o При отсутствии этих подсчетовмеры, сокращающие область действия (раздел 5.1.5.1) и время истечения срока действия (раздел 5.1.5.3) для маркеров доступа могут использоваться для уменьшения ущерба в случае утечек.
o Клиентский сервер может перезагрузить целевую страницуURI перенаправления для автоматической очистки кэша браузера.
Теперь также есть расширение протокола Oauth, опубликованное в RFC 7636 , которое защищает от кражи других клиентов.код авторизации для конкретного клиента на мобильном устройстве.См. RFC для более подробной информации.