2010-06-14 3 views
10

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

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

  1. Она должна быть безопасной (дух)
  2. Необходимо более поддерживать дополнительные пользовательские свойства и выше обычного имени , адресный материал (например, деньги или кредиты для пользователя)
  3. Для его удобства он должен предоставить централизованную веб-консоль управления пользователями (я понимаю, что это будет небольшой проект поверх любого дизайнерского решения, на которое я решил пойти)
  4. Он должен интегрироваться с существующим w ebsites без реинжиниринга всего продукта (я понимаю, что это зависит от текущей реализации продукта).
  5. Он должен иметь дело с отправкой по электронной почте пользователя, когда он регистрируется (для активации его учетной записи)
  6. Он должен иметь дело с активацией пользователя, когда он нажимает на ссылку «Включить меня» в письме (я понимаю, что 5 и 6 требуют какой-либо формы системы шаблонов электронной почты для поддержки разных электронных писем для каждой заявки)

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

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

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

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

ответ

3

Основная идея заключается в том, что вы не можете аутентифицировать пользователя, используя стандартную проверку подлинности через несколько доменов. Например, 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, а затем пользователь, уже зарегистрированный на одном сайте, не будет выходить из системы при перемещении через разные веб-сайты в том же домене.

+0

Мы сделали это через руководство, и в базе данных есть «аутологический» стол с истечением 3 минут. Предполагается, что весь сайт может получить доступ к единой общей базе данных. – dvallejo

+0

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

2

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

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

Другой вариант заключается в реализации вход с OpenID/Windows Live или аналогичный.

+0

Я знаю провайдера членства ASP.Net, но он гибкий для упомянутого сценария? например, как он делегирует отправку электронной почты для подтверждения и т. д. в основное веб-приложение? thx – Yannis

+0

Электронная почта должна быть построена поверх провайдера. Например. http://www.c-sharpcorner.com/uploadfile/raj1979/passwordrecovery10032008150514pm/passwordrecovery.aspx имеет элемент управления ASP.Net pw, который выполняет электронную рассылку. –

+0

Добавлена ​​заметка об использовании OpenID или Winodws Live для SSO. В зависимости от вашего сценария это может быть вариант. –

Смежные вопросы