Безопасный переход пользователей между двумя сайтами

StackOverflow https://stackoverflow.com/questions/5893326

Вопрос

У меня есть свой сайт "А".У меня будет бизнес-контракт с сайтом "B", позволяющий пользователям сайта "B" (таких сайтов будет много) перенаправлять своих пользователей на мой сайт, когда пользователи выполняют одно из многих действий, связанных с "A", на "B".Я могу поручить передачу любой информации из "B" в "A" напрямую или через браузер пользователя "B", но мне (т.Е. сайту A) НУЖНО подтвердить, что они действительно пришли с "B", и автоматически зарегистрировать их на сайте "A".

Я ЗНАТЬ что OAuth делает это хорошо - но ТОЛЬКО на уровне "пользователя".То, что здесь происходит, является деловым контрактом между сайтом A и сайтом B - и нет необходимости причинять неудобства каждому пользователю "B", чтобы выполнять всю процедуру OAuth...

Пожалуйста, также обратите внимание, что пользователям сайта "B" будет представлена ФОРМА, на которую им необходимо нажать, чтобы эти действия были переданы на мой сайт "A".Любые секретные / аутентификационные данные (если таковые имеются), передаваемые пользователю "B", могут быть замечены (и подделаны) им.Мой сайт "А" должен быть защищен от этого.

Это близко: Безопасная Передача пользователей между веб-сайтами .

Параметры, перечисленные там:

  1. Напишите вызов веб-службы по протоколу HTTPS на обоих концах, чтобы получить данные пользователей, и это работает только для определенной пары логинов.
  2. Взгляните на "Сквозную аутентификацию" - это концепция, которая позволяет передавать идентификационные данные пользователя из одной системы в другую.
  3. Лучшее, что я могу придумать прямо сейчас, - это передать ХЭШ идентификатора пользователя или, если это заставляет вас беспокоиться, хэш некоторых других пользовательских данных.
  4. На сайте B может быть веб-сервис, который позволяет сайту A создавать сеанс для пользователя.

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

Мои вопросы:

  1. Как я должен это реализовать?
  2. Есть какие-нибудь готовые реализации php, которые позволяют это?

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

Это было полезно?

Решение

Каков уровень безопасности этих сайтов (например, банковских или блогов)?Для действительно простых случаев сайт B может кэшировать КОНТРОЛЬНУЮ СУММУ данных ФОРМЫ.И когда пользователь перенаправляется на A, то A может напрямую запросить у B контрольную сумму и проверить данные.Для дополнительной безопасности можно настроить аутентификацию между сайтами по IP или ключу.

Если вам требуется больше безопасности, возможно, OAuth по-прежнему остается лучшим вариантом.Имейте в виду, что пользователи являются уже вошли в систему в B, так что им не нужно будет ничего вводить.И форма, которую они отправляют, фактически может одновременно настраивать OAuth, так что, когда пользователь перенаправляется на A, A фактически получает токен, а затем может извлекать данные из B через OAuth (таким образом, подтверждая, что данные поступили из B).

В дополнение к уже упомянутому Шибболет, существует совместимый стандарт SAML 2.0 который может вас заинтересовать и очень хорошая PHP-реализация обоих этих протоколов SimpleSAMLphp который поставляется в виде готового веб-сервиса, а также библиотек для использования в пользовательских приложениях.Процесс обучения созданию такой федерации единого входа был не слишком крутым, и SimpleSAMLphp довольно хорошо документирован.

Но поскольку для такого единого входа требуется SAML / Shibboleth для всех B-ов, а также настройка и поддержание метаданных федерации между сторонами, OAuth все равно может быть лучшим выбором для вас.

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

Вы могли бы использовать систему единого входа, например Шибболет.

Система Shibboleth - это основанный на стандартах программный пакет с открытым исходным кодом для единого веб-входа в Систему в рамках организации.Это позволяет сайтам принимать обоснованные решения об авторизации для индивидуального доступа к защищенным онлайн-ресурсам с сохранением конфиденциальности.

Если это для вас излишне, просто предоставьте обоим сайтам доступ к пользовательским данным друг друга через HTTPS API через случайный хэш, уникальный для каждого пользователя, который просто передается при нажатии "кнопки".

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top