Как защищен oauth при использовании с REST API

У меня есть веб-приложение, которое взаимодействует с моим 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 аутентифицирует код до истечения срока его действия, они могут затем аутентифицировать себя как кто-то еще и получить доступ к своим данным.

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
248
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Oauth касается авторизации, а не аутентификации. Измените «аутентифицировать» на «авторизовать» в своем вопросе.

«Разрешить доступ» нажимает не клиент, а пользователь. Суть Oauth заключается в том, что пользователь хочет предоставить клиенту доступ к некоторым своим данным, не сообщая клиенту свой пароль. Oauth позволяет ему делать это с помощью доверенного браузера, поэтому пользователь может чувствовать себя в безопасности при использовании клиента.

Без протокола Ouath единственный способ, которым он мог бы это сделать, - это предоставить свой пароль клиенту. Представьте, что множество клиентов, которых вы используете каждый день, хотят получить доступ к вашим данным Facebook - без Oauth вам пришлось бы вводить свои учетные данные Facebook в этих клиентов, что дало бы им полный доступ ко всему вашему Facebook. Вы бы чувствовали себя комфортно с этим? Вы не должны, потому что это откроет дверь для всех видов злоупотреблений вредоносным ПО. Oauth позволяет ограничить доступ этих клиентов к вашей учетной записи Facebook (или другой учетной записи), чтобы вы могли быть уверены в используемом приложении.

Теперь к вашему вопросу - риск кода в URL. Это действительно серьезная проблема, но она предназначена для одноразового использования (он обменивается на токен доступа для использования с множественным доступом) и имеет короткий срок службы. Причина, по которой используется код авторизации, объясняется в Раздел 3.4 модели угроз Oauth. Точная проблема, о которой вы спрашиваете, рассматривается в Раздел 4.4.1.1 модели угроз Oauth:

o As per the core OAuth spec, the authorization server as well as the client must ensure that these transmissions are protected using transport-layer mechanisms such as TLS (see Section 5.1.1).

o The authorization server will require the client to authenticate wherever possible, so the binding of the authorization "code" to a certain client can be validated in a reliable way (see Section 5.2.4.4).

o Use short expiry time for authorization "codes" (Section 5.1.5.3).

o The authorization server should enforce a one-time usage restriction (see Section 5.1.5.4).

o If an authorization server observes multiple attempts to redeem an authorization "code", the authorization server may want to revoke all tokens granted based on the authorization "code" (see Section 5.2.1.1).

o In the absence of these countermeasures, reducing scope (Section 5.1.5.1) and expiry time (Section 5.1.5.3) for access tokens can be used to reduce the damage in case of leaks.

o The client server may reload the target page of the redirect URI in order to automatically clean up the browser cache.

Теперь также есть усовершенствование протокола Oauth, опубликованного в RFC 7636, которое защищает от кражи кода авторизации для конкретного клиента на мобильном устройстве другими клиентами. См. RFC для более подробной информации.

Спасибо, это было невероятно подробно и очень мне помогло!

buydadip 04.10.2018 01:08

Другие вопросы по теме