Аутентификация ASP .NET Cross Site Forms работает в Dev, но не в рабочей среде - PullRequest
2 голосов
/ 15 августа 2011

У меня есть два сайта MVC3, оба размещены на одном сервере, который я настроил на использование одинаковых файлов cookie аутентификации.

Первый сайт - это сайт интрасети, использующий проверку подлинности Windows. У этого сайта есть одно простое действие, которое проверяет, прошел ли пользователь аутентификацию, если он был, он создает cookie-файл FormsAuthentication, который он добавляет к ответу. Этот файл cookie создан для обычного пользователя, который я определяю по группам AD пользователя. Затем ответ перенаправляет пользователя на второй сайт, который использует проверку подлинности с помощью форм.

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

Вот как я делаю все вышеперечисленное:

Во-первых, я заставил оба сайта использовать один и тот же ключ компьютера для шифрования и дешифрования.

Когда я создаю файл cookie на Сайте 1, я гарантирую, что он имеет то же имя и Домен, что и файлы cookie, созданные на Сайте 2.

     var cookie = FormsAuthentication.GetAuthCookie(userName, false);
     cookie.Domain = FormsAuthentication.CookieDomain; //This is the Domain of my 2nd site as they are different

     HttpContext.Response.Cookies.Add(cookie); //Add my cookie to the response
     HttpContext.Response.RedirectPermanent(urlForSite2);

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

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

Ответы [ 2 ]

1 голос
/ 15 августа 2011

Кросс-доменные куки не допускаются.Если у вас есть два отдельных домена;никто не может получить доступ к другим куки.Два отдельных виртуальных каталога / приложения будут работать при использовании одного и того же ключа машины.http://blogs.technet.com/b/sandy9182/archive/2007/05/07/sharing-forms-cookie-between-asp-net-web-application.aspx

Если вы хотите разделить файлы cookie для входа между поддоменами, вам нужно отредактировать свойство Domain файла cookie для входа в домен 2-го уровня «abc.com», чтобы «www.abc.com»и "ww2.abc.com" будет иметь доступ к cookie.http://forums.asp.net/t/1533660.aspx

String usrName = User.Identity.Name.ToString();
HttpCookie authCookie = Security.FormsAuthentication.GetAuthCookie(usrName, false);
authCookie.Domain = "abc.com";
Response.AppendCookie(authCookie);
0 голосов
/ 15 августа 2011

На самом деле это возможно, но не так просто, как совместное использование файлов cookie домена / субдомена.

http://www.codeproject.com/KB/aspnet/CrossDomainSSOModel.aspx

Хотя приведенный в этой статье пример не помогприменить непосредственно к тому, что я делал, я мог бы использовать некоторые идеи, высказанные там, чтобы получить то, что мне нужно работать.В конечном итоге это были мои настройки конфигурации в site2 web.config.

Мои URL-адреса следующие:

Для сайта 1 требуется запись хоста, адресующая его по определенному IP-адресу хост-машины.Это также запись в моих настройках безопасности IE - Локальные сайты в интрасети.

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

Я думал, что решил свою проблемуно установив Домен в файле конфигурации и пустую строку, но это не сработало.Я не уверен, что можно сделать сейчас.Это все еще работает, когда я запускаю его на своем локальном компьютере, но не когда я запускаю его на своем сервере.Единственное различие заключается в URL.

Мой аппарат использует URL

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

ОБНОВЛЕНИЕ: Я думаю, что мой ответ указан в моих URL выше.Оба URL моей машинной машины используют одно и то же доменное имя, которое в данном случае является localhost.Я думаю, что если я изменю свои развернутые веб-сайты на использование того же домена, я буду в порядке.Я опубликую обновление, когда получу его.

...