Мне нужно было точно такое же решение для клиента, на которого я работал, я проводил исследования и находил только хорошие решения, которые были либо слишком сложными и недостаточно хорошо документированными, либо слишком дорогими (я забыл, какие компании я изучал). Поэтому я решил создать собственное решение.
Это краткое описание реализованного решения:
Чтобы прояснить ситуацию, давайте назовем «узлы» доменами, в которых вы хотите аутентифицировать пользователя, а «SSO» - поставщиком аутентификации.
Я использовал решение, похожее на то, которое вы указали в ссылке, которую вы разместили ОДНАКО я использовал cookie-файл безопасности Asp.Net всякий раз, когда хотел аутентифицировать узел, а также аутентифицировать веб-сайт единого входа:
HttpCookie formsCookie = FormsAuthentication.GetAuthCookie(userName, false, HttpRuntime.AppDomainAppVirtualPath);
HttpContext.Current.Response.Cookies.Add(formsCookie);
Это также позволило мне не запрашивать ответ у поставщика единого входа для каждого веб-запроса, как показано в примере, который вы опубликовали.
Я использовал новый AuthenticationKey каждый раз, когда хотел сообщить от поставщика единого входа обратно к узлу, что аутентификация прошла успешно.
Также я добавил некоторые функции безопасности, такие как зашифрованная связь, и ключ мог быть действительным максимум 2 секунды (время для единого входа, чтобы передать его на узел), и как только он был использован, он был бы удален.
Я считаю, что это решение достаточно безопасно, однако использование внешнего готового решения, безусловно, безопаснее.
Мне потребовалось всего несколько дней, чтобы реализовать все решение, так что это не слишком длинная задача. Однако я не могу поделиться проектом, так как не уверен, что клиент согласится.
Я надеюсь, что эти предложения могут помочь вам.
Дайте нам знать, что вы решите сделать в конце.