WedX - журнал о программировании и компьютерных науках

Почему спецификация OAuth2 не определяет режим ответа JSON для неявного потока?

Мне интересно, почему спецификация OAuth2 не определяет режим ответа JSON для возврата токена доступа в неявном потоке предоставления. Не потому ли, что не было времени согласовать это и уточнить? Или возврат токена доступа в формате JSON открывает определенные уязвимости в системе безопасности? Если это так, было бы интересно узнать, какие именно (я подозреваю, что возврат JSON в теги вредоносных скриптов можно смягчить, проверив заголовок запроса ContentType или RequestedWith).

Существует широкий спектр современных приложений javascript, которым необходимо обновить токен доступа. Обычно это необходимо, когда разрешения для защищенных ресурсов часто меняются (например, когда некоторые пользователи предоставляют разрешения другим пользователям для ресурсов, которыми они владеют). В этом случае необходимо получать токен доступа каждый раз при доступе к защищенным ресурсам.

В настоящее время спецификация OAuth2 предоставляет 2 режима ответа: фрагмент и сообщение формы (в черновике). Фрагмент ответа требует перенаправления, которое не является дружественным для пользователя. Также возможно опубликовать форму с методом GET в скрытом iframe, который вызовет обратный вызов кода javascript, который передаст токен доступа в родительское окно. Но это довольно хакерский подход с точки зрения разработки.

Было бы намного чище просто вернуть токен доступа в формате JSON через запрос AJAX, учитывая, что это не поставит под угрозу безопасность.


Ответы:


1

Перенаправление имеет решающее значение для гарантии того, что токен доступа будет доставлен RP, а не злоумышленнику в неявном потоке.

Если бы у Stack Overflow был REST API с неявным грантом OAuth2, который возвращал токен в каком-то формате JSON, тогда все, что мне нужно было бы сделать, это обманом заставить вас перейти на одну из моих веб-страниц, а затем притвориться официальным клиентом Stack Overflow, запрашивающим токен доступа с вашим сеансом (поскольку вы, вероятно, вошли в систему).

Сервер SO вернет мне (через CORS) немного JSON с ВАШИМ токеном доступа, и тогда я смогу выдать себя за вас, и вы не станете мудрее.

Теперь, учитывая, что вам все равно нужно выполнить перенаправление, можно добавить параметры в токен JSON и добавить его в параметр запроса. Но если вам уже нужно выполнять синтаксический анализ запроса/фрагмента, вы можете просто получить параметры из запроса/фрагмента вместо того, чтобы заставлять клиента выполнять синтаксический анализ JSON.

22.08.2014
  • Не могли бы вы уточнить один момент? Допустим, SO — наша жертва, а evil.com — веб-сайт, который вы обманом заставили пользователя посетить. Когда вы делаете запрос JSON от evil.com к SO от имени пользователя, вам необходимо отправить его с учетными данными (в противном случае файлы cookie запроса не будут отправлены в SO, и он не вернет токен доступа, поскольку запрос не аутентифицирован). И когда вы отправляете запрос с учетными данными, SO должен явно внести evil.com в белый список в своем Access-Control-Allowed-Origins. Да, есть еще приемы с встраиванием ajax-вызова в тег ‹script›, но опустим их. 25.08.2014
  • Да, это будет означать, что evil.com сможет получить учетные данные только для пользователей, которые уже дали согласие на этот клиент (лучше всего работает с XSS-уязвимостью, некоторой социальной инженерией или действительно большой базой пользователей). Большая партия, такая как SO, не собирается составлять белый список для каждого клиента API, они просто разрешат всем. 25.08.2014
  • Нет, я имел в виду, что evil.com не сможет получить какие-либо учетные данные - при выполнении междоменного ajax-запроса с файлами cookie SO должен внести в белый список evil.com, разрешив все, не работает. См. это Например. Если пользователь дает согласие на злой клиент, то тут вообще ничего не поможет. Социальная инженерия — да, но это другой вектор атаки. Так что я до сих пор не совсем уверен, что это за уязвимость :) 27.08.2014
  • Теперь, когда я думаю об этом, это в основном сводится к следующему вопросу: можно ли украсть личные данные с веб-сайта, используя авторизацию на основе файлов cookie с использованием CSRF? Да, вы можете вмешиваться в действия пользователя, отправляя его на //so.com/account/delete, когда он нажимает на картинки и тому подобное, но вы не можете прочитать личные данные пользователя. Ну и есть пара уязвимостей с перенастройкой массивов JSON, но мы их здесь не рассматриваем. 27.08.2014
  • Ах, не знал, что вы не можете использовать подстановочные знаки CORS с учетными данными в браузере, спасибо за это. В любом случае, это не имеет значения, пока у evil.com есть ваш client_id и токен доступа, он может выполнять внутренний запрос, CORS не требуется. 27.08.2014
  • (пока у evil.com есть ваш client_id и токен доступа) - у evil.com нет моего токена доступа, он должен сначала его украсть :) Бэкенд-запрос тоже не будет работать - у evil.com нет моих куки в его бэкенде поэтому он может делать запросы с учетными данными только из браузера. Так что я до сих пор не понимаю, как можно украсть токен доступа... 27.08.2014
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]