Как обеспечивается безопасность oauth при использовании с REST API - PullRequest
0 голосов
/ 03 октября 2018

У меня есть веб-приложение, которое взаимодействует с моим REST API.Я решил провести некоторую аутентификацию oauth и следовал некоторым учебникам о том, как ее реализовать, но я все еще пытаюсь понять, почему она безопасна или как я могу сделать ее безопасной.

Моя реализация выглядит примерно такэто ...

1. client makes request to Facebook
2. client clicks `allow access`
3. Facebook redirects back to client with code in URL
4. client makes a POST request of the code to the REST API
5. REST API authenticates code via a request to Facebook using the secret key
6. Success/fail response to client from REST API

Моя проблема в том, как это обеспечивает безопасность?Из того, что я могу сказать, код сохраняется в URL-адресе браузера, поэтому некоторый вредоносный код может извлечь этот код .Если вредоносный код может определить, какой вызов REST аутентифицирует код до истечения срока его действия, он может затем аутентифицировать себя как кого-то другого и получить доступ к своим данным.

Возможно, моя реализациянеправильно, однако, я следовал этой диаграмме , как мог, а также другим учебникам.

Если мой подход неверен, что я могу сделать, чтобы обеспечить безопасность?

1 Ответ

0 голосов
/ 04 октября 2018

Я скоро вернусь к вашему вопросу, но сначала позвольте мне сказать несколько предварительных замечаний.

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 для более подробной информации.

...