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

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

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

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


Короче

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

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

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

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

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

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

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

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

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

Провайдер проверки подлинности паспорта

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

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

  • SimpleSAMLphp
  • Службы федерации Active Directory

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