Подтвердить что ты не робот

Asp.net формирует аутентификацию и несколько доменов

У меня есть два домена, domain1.com и domain2.com, указывающие на тот же сайт asp.net, который использует сборку asp.net в форме аутентификации. Проблема в том, что даже если домены указывают на один и тот же сайт, пользователь получает только аутентификацию только для одного домена за раз. Поэтому, если он сначала использует сайт www.domain1.com, а затем посещает сайт www.domain2.com на том же веб-сайте в спину, но он только аутентифицирован на www.domain1.com. То же самое происходит, если он использует www, а не www при посещении сайтов.

Это то, что я использую для входа:

FormsAuthentication.RedirectFromLoginPage(username, cookie.Checked);

Чтобы проверить логин:

User.Identity.IsAuthenticated

Как я могу заставить пользователя пройти аутентификацию для всех доменов, указывающих на один и тот же сайт?

4b9b3361

Ответ 1

Зачем вам нужно решение для единого входа.

Поскольку аутентификация ASP.NET на самом деле основана на основном cookie, есть две вещи, на которые нужно смотреть:

  • Правильно настройте файлы cookie.
  • Откажитесь от пользователей в альтернативный домен во время регистрации.

Глядя на обе эти глубины:

1. Правильная настройка файлов cookie

Вам нужно убедиться, что ASP.NET записывает cookie аутентификационного билета в корневой домен, а не в явный домен, это выполняется с помощью атрибута domain элемента forms:

<forms 
   name="name" 
   loginUrl="URL" 
   defaultUrl="URL"
   domain=".example.com">
</forms>

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

2. Откачать пользователей в альтернативном домене

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

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

Другие детали, которые необходимо учитывать при такой настройке:

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

Вы также можете взглянуть на Аутентификация форм на всех приложениях

Ответ 2

Вы можете попробовать установить cookieless="true".

Ответ 3

Вы должны прочитать Explained: Forms Authentication в MSDN. Они охватывают междоменную аутентификацию.