Безопасное прохождение пользователей между двумя сайтами - PullRequest
1 голос
/ 05 мая 2011

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

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

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

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

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

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

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

Мои вопросы:

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

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

Ответы [ 2 ]

0 голосов
/ 05 мая 2011

Каков уровень безопасности этих сайтов (т. Е. Банки против блогов)? Для действительно простых случаев сайт B может кешировать данные формы CHECKSUM. И когда пользователь перенаправляется на A, то A может напрямую запросить B контрольную сумму и проверить данные. Для обеспечения дополнительной безопасности можно настроить аутентификацию на основе IP или ключей между сайтами.

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

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

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

0 голосов
/ 05 мая 2011

Вы можете использовать систему с единым входом, такую ​​как Shibboleth .

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...