Я реализовал решение единого входа между несколькими приложениями ASP.NET MVC, размещенными в одном родительском домене (app1.domain.com, app2.domain.com, ...), используя проверку подлинности с помощью форм и установив domain свойство куки в web.config всех приложений:
<forms
name="ssoauth"
loginUrl="/login"
protection="All"
timeout="120"
requireSSL="true"
slidingExpiration="false">
domain="domain.com"
/>
Когда вы задаете свойство cookie для домена, этот файл cookie автоматически отправляется браузером клиента всем приложениям, размещенным на этом домене, и он может автоматически проверять подлинность пользователя.
Если вы хотите реализовать междоменный SSO с использованием проверки подлинности с помощью форм, вот что вы можете сделать:
- Пользователь переходит на
foo.com
и выполняет вход. Приложение, размещенное на foo.com
, использует стандартную проверку подлинности с помощью форм, ничего особенного.
- Пользователь решает перейти на
bar.com
и нажимает на созданную вами ссылку. Эта ссылка может содержать параметр токена, который будет содержать зашифрованное имя пользователя. Это шифрование может быть выполнено с использованием ключей машины и выглядеть примерно так: https://bar.com?token=ABC
.
- Приложение, размещенное на
bar.com
, получает запрос и, поскольку оно использует такие же машинные ключи , как и другое приложение, оно способно расшифровывать токен и получение имени пользователя. Затем он просто входит в систему, отправляя локальный файл cookie для аутентификации, и пользователь автоматически входит в систему bar.com
.