Автоматический вход на текущий сайт, если пользователь зашел на другой сайт - PullRequest
9 голосов
/ 23 декабря 2011

У меня есть около 100 сайтов, закодированных в ASP classic. Каждый сайт принимает заказы и сохраняет их в базе данных. Однако оплата этих заказов должна быть произведена на другом сайте, также закодированном в ASP classic. Все веб-сайты принадлежат одной и той же компании, размещены на одном сервере IIS и используют одну и ту же базу данных SQL Server.

Теперь пользователь регистрируется, вводя некоторую личную информацию, и входит на один из этих веб-сайтов (например, website-for-newjersey.com) и размещает заказ. Затем он перенаправляется на сайт платежей (payment.master-website.com по адресу https), где некоторая его личная информация (адрес, город, штат для доставки; имя для держателя кредитной карты и т. Д.) Отображается в форме оплаты. Информация о кредитной карте вводится на этой странице.

Из-за чувствительности информации, отображаемой на этой странице, пользователь должен войти на сайт оплаты, прежде чем он сможет просмотреть заполненную форму . И я не хочу, чтобы пользователь входил дважды (по одному разу на каждом сайте). Существует ли надежный способ проверки, выполнил ли пользователь вход на сайт со ссылкой , используя классический ASP.


Короче говоря

  • На сайте B мне нужно проверить, зашел ли посетитель на сайт A
  • На веб-сайте B мне нужна переменная сеанса ID с веб-сайта A
  • Оба сайта используют один и тот же сервер базы данных
  • Мне нужны четкие инструкции
  • Решение PHP или ASP.NET приемлемо, если оно универсальное / переносимое

Ответы [ 4 ]

9 голосов
/ 23 декабря 2011

Из вызывающего сайта вы можете создать guid или другое случайно сгенерированное значение.Сохраните его в пользовательской записи (срок действия которой истекает через указанный промежуток времени) в базе данных, зашифруйте ее и передайте по SSL на платежный сайт, где он расшифровывается, а затем сравнивается с базой данных.Если они совпадают, то пользователь входит в систему, если он не совпадает, тогда его просят войти в систему.

Другой способ, хотя я не уверен, что это может быть сделано с другими доменными именами, это использование сеансов.Поскольку они все на одной машине, это возможно, но я не уверен на 100% в этом.

4 голосов
/ 09 июня 2014

То, что вы спросили, называется единой регистрацией (SSO) и может быть реализовано несколькими способами.Есть много тем по этому вопросу, например: Какой ваш любимый междоменный подход к использованию файлов cookie? , но все они различаются в зависимости от индивидуальных требований.

В вашем случае у вас разные домены (так что вывы не можете обмениваться файлами cookie между ними), вы смешиваете http и https (что может быть проблемой) и у вас много приложений, поэтому вы не будете вносить много изменений.

Поэтому я бы рекомендовал рассмотреть предложение Роберта:

  1. Когда пользователь проходит аутентификацию впервые (веб-сайт A), вы сохраняете GUID в базе данных.Добавьте новую таблицу для сеансов со столбцами для GUID, идентификатора пользователя, ip и метки времени или сохраните ее как часть данных заказовСохраните GUID в объекте сеанса.
  2. На странице, на которой была ссылка на сайт оплаты, задайте ее в строке запроса или в качестве скрытой переменной (если это форма).
  3. В другом домене (веб-сайт B) проверьте GUID и найдите его в базе данных.Если он не был слишком старым, то аутентифицируйте пользователя, в противном случае перенаправьте его на страницу входа.

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

1 голос
/ 13 июня 2014

Если вы не можете внедрить единый вход на уровне своей инфраструктуры, вы должны использовать Identity Federation , которая позволяет приложениям другой доверенной стороны обмениваться аутентификацией через утверждения.

Этоможно сделать, используя Язык разметки утверждений безопасности (SAML) напрямую или с такими продуктами / стандартами, как:

Также вы можете взглянуть на OAuth или OpenID , которые являются более общими схемами аутентификации, чем SSO или федерация идентификации.

1 голос
/ 13 июня 2014

Проверка подлинности на основе проходного порта - это централизованная служба проверки подлинности, предоставляемая Microsoft, которая предлагает единый вход и службы основного профиля для сайтов-участников. Для получения дополнительной информации см. Следующий веб-сайт Microsoft:

Поставщик паспортной аутентификации

...