Несколько веб-сайтов, дизайн с одним знаком входа

У меня есть вопрос. В последнее время у клиента, который я занимаюсь некоторыми работами, есть ряд веб-сайтов с различными механизмами входа. Он хочет медленно перейти к механизму единого входа для своих сайтов (все написано в asp.net mvc).

Я рассматриваю свои варианты здесь, так что вот список требований:

  • Он должен быть защищен (duh)
  • Он должен поддерживать дополнительные пользовательские свойства сверх обычного имени, содержимого адреса (например, денег или кредитов для пользователя).
  • Для удобства он должен предоставить централизованную веб-консоль управления пользователями (я понимаю, что это будет небольшой проект поверх любого дизайнерского решения, на которое я выбираю)
  • Он должен интегрироваться с существующими веб-сайтами без реорганизации всего продукта (я понимаю, что это зависит от текущей реализации продукта).
  • Он должен иметь дело с отправкой по электронной почте пользователя, когда он регистрируется (чтобы он мог активировать свою учетную запись).
  • Он должен иметь дело с активацией пользователя, когда он нажимает на ссылку "Включить меня" в письме (я понимаю, что 5 и 6 требуют какой-либо формы системы шаблонов электронной почты для поддержки разных электронных писем для каждого приложения).

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

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

Но это похоже на очень распространенную проблему, так что существуют ли какие-либо существующие проекты, которые я мог бы использовать?

Спасибо за чтение.

Ответ 1

Основная идея заключается в том, что вы не можете аутентифицировать пользователя, используя стандартную проверку подлинности через несколько доменов. Например, dev.google.com и www.google.com - это разные домены, и если пользователь подписывается на dev.google.com, он не автоматически подписывается на www.google.com, если Google не делает что-то особенное, чтобы включить это. Это связано с тем, что браузер не может получить доступ к файлам cookie другого веб-сайта.

Единственный способ действительно сделать знак перекрестного домена в работе - включить ключевое значение, такое как идентификатор сеанса в строке запроса URL-адреса, который исследуется веб-сайтом, и устанавливает файл cookie аутентификации пользователя. Возможно, вы можете сделать это вручную через свой сайт, используя небольшой бит своего собственного кода.

Пример: http://www.example.com/autoLogin.aspx?sessionid=23232323

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

Теперь, если сайты находятся в одном домене, вы можете предоставить им все тот же MachineKey, а затем пользователь, уже зарегистрированный на одном сайте, не будет выходить из системы, когда перемещается по различным веб-сайтам в одном домене.

Ответ 2

Посмотрите на модель поставщика членства ASP.Net.

Ниже приведен небольшой пример ссылок на ресурсы в MSDN об этом. Он должен охватывать все ваши потребности. Последние две ссылки относятся к выборочной реализации в SQL. Вы можете легко расширить поля, чтобы удовлетворить ваши потребности.

Другой вариант - реализовать логин с OpenID/Windows Live или аналогичным.