Я обнаружил, создав 2 новых веб-сайта под IIS 7, что аутентификация с единым входом не работает при запуске в разных пулах приложений. Когда я перемещаю приложения в один и тот же пул, я могу войти в один из них и войти в другой. Когда я изменяю пул приложений на одном из них, я не захожу во второй.
Есть ли какие-либо параметры, которые можно установить в файле machine.config, чтобы позволить им совместно использовать один и тот же файл cookie для пулов приложений?
Ex. 1:
proj1 (пул приложений .net 2)
proj2 (пул приложений .net 2)
= Единый вход работает, они используют один и тот же файл cookie авторизации.
Ex. 2:
proj1 (пул приложений .net 2)
proj2 (пул приложений .net 4, встроенный / классический)
= Единый вход не работает, они НЕ используют один и тот же файл cookie авторизации.
Ex. 2:
proj1 (пул приложений .net 4, встроенный / классический)
proj2 (пул приложений .net 4, встроенный / классический)
= Единый вход работает, они используют один и тот же файл cookie авторизации.
Оригинальный пост
Последнее обновление внизу
У меня есть 2 проекта, один из них - asp.net webforms, а другой - проект MVC 3.
Я следовал этому руководству, смотрите внизу, и я запустил его на своем компьютере. Но когда я загружаю его на сервер, он больше не работает. Различия, о которых я могу подумать: 1) на сервере мы используем SSL, 2) проект webforms использует .net 2 и проект MVC использует .net 4 (интегрированный режим) и 3) я использую IIS 7 на сервер и я использую VS 2008/2010, чтобы проверить его на моей локальной машине.
asp.net MVC 3 (.net 4)
<forms name=".ASPXAUTH" loginUrl="~/Home/Login" timeout="30" enableCrossAppRedirects="true" domain=".mydomain.com" ticketCompatibilityMode="Framework20" />
Веб-формы (.net 2)
<forms name=".ASPXAUTH" loginUrl="Default.aspx" defaultUrl="Default.aspx" timeout="30" domain=".mydomain.com" enableCrossAppRedirects="true" />
Самое смешное, что я загрузил страницу test.aspx в оба проекта - Mvc (.net 4) и webforms (.net), и это просто отображает некоторые следы.
Оба проекта имеют одинаковые sessionid и .ASPXAUTH. На моем локальном хосте я могу получить доступ к ASPXAUTH в проекте mvc, но не могу получить к нему доступ на сервере.
Проекты выполняются в виде поддоменов, mvc.mydomain.com и webforms.mydomain.com.
У кого-нибудь есть идеи, как это решить? У меня полный доступ к IIS 7.0.
(я также пытался отключить SSL на сервере, но все равно получаю тот же результат)
Руководство по совместному использованию аутентификации:
http://www.codeproject.com/KB/aspnet/SingleSignon.aspx
Обновлено
Я также попробовал это: (webforms .net 2.0)
var ticket = new FormsAuthenticationTicket(1, "authtest", DateTime.Now, DateTime.Now.AddMinutes(30), false, login.Email);
var enc = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie("authcookie", enc) {Domain = ".mydomain.com"};
Response.Cookies.Add(cookie);
и в mvc 3 (.net 4)
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(HttpContext.Request.Cookies["authcookie"].Value);
ViewBag.User = "User: " + ticket.Name;
Это приводит к следующей ошибке: «Длина данных для расшифровки недопустима.»
Обновлено 6 июля
Забавно! Когда я добавляю 2 новых домена, который работает под .net 2, он работает отлично. Но когда я меняю пул приложений на .net 4, он перестает работать. Как будто они не совместимы, или я могу где-то пропустить настройку