Asp.net формирует аутентификацию и несколько доменов - PullRequest
25 голосов
/ 13 января 2010

У меня есть два домена, 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

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

Ответы [ 3 ]

44 голосов
/ 13 января 2010

То, что вам нужно, - это решение с единым входом.

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

  1. Правильно установите файлы cookie.
  2. При регистрации зарегистрируйте пользователей в альтернативном домене.

Более подробно рассмотрим оба из них:

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

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

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

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

3 голосов
/ 13 января 2010

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

0 голосов
/ 13 января 2010

Вы должны прочитать Объяснено: Аутентификация с помощью форм в MSDN. Они охватывают междоменную аутентификацию.

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