Единый вход не работает правильно при использовании разных пулов приложений? - PullRequest
4 голосов
/ 01 июля 2011

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

Ответы [ 2 ]

0 голосов
/ 13 июля 2011

Мы не смогли найти никаких способов сделать это, поэтому нам пришлось преобразовать наш другой проект для использования пула интегрированных приложений .net 4.

0 голосов
/ 04 июля 2011

Я думаю, вы должны установить machineKey в Web.config обоих приложений на одно и то же значение. Вы можете создать раздел машинного ключа здесь: http://aspnetresources.com/tools/machineKey

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