Использование sso для проектов asp.net без внешней регистрации - PullRequest
1 голос
/ 30 августа 2011

У меня есть два проекта asp.net в разных доменах.Эти проекты используют одну базу данных.Пусть скажут www.test1.com и www.test2.com.(Позднее будет больше проектов)

У меня уже есть форма регистрации и зарегистрированные пользователи.

Теперь мне нужно реализовать возможность SSO без регистрации на внешних сайтах (google, openId, facebook).

Вся обнаруженная мною реализация требует внешней регистрации (CAS, Federation, Facebook, openId).

Также я прочитал эту статью http://www.codeproject.com/KB/aspnet/CrossDomainSSOExample.aspx,, но насколько я понял из комментариевтакое решение очень небезопасно.

Пожалуйста, предложите решение или существующую библиотеку, которая может помочь мне использовать SSO без внешней регистрации.

1 Ответ

1 голос
/ 01 сентября 2011

Мне нужно было точно такое же решение для клиента, на которого я работал, я проводил исследования и находил только хорошие решения, которые были либо слишком сложными и недостаточно хорошо документированными, либо слишком дорогими (я забыл, какие компании я изучал). Поэтому я решил создать собственное решение. Это краткое описание реализованного решения: Чтобы прояснить ситуацию, давайте назовем «узлы» доменами, в которых вы хотите аутентифицировать пользователя, а «SSO» - поставщиком аутентификации. Я использовал решение, похожее на то, которое вы указали в ссылке, которую вы разместили ОДНАКО я использовал cookie-файл безопасности Asp.Net всякий раз, когда хотел аутентифицировать узел, а также аутентифицировать веб-сайт единого входа:

HttpCookie formsCookie = FormsAuthentication.GetAuthCookie(userName, false, HttpRuntime.AppDomainAppVirtualPath); 
HttpContext.Current.Response.Cookies.Add(formsCookie);

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

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

Дайте нам знать, что вы решите сделать в конце.

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