У меня есть 2 интернет-сайта MVC3.Один (Site1) использует проверку подлинности Windows и находится в зоне локальной интрасети.Второй (Site2) общедоступен и использует проверку подлинности с помощью форм.Оба сайта находятся в одном домене, но имеют разные субдомены.Я хочу поделиться аутентификационными файлами cookie между ними.Для этого им нужны одинаковые настройки в веб-конфигурации.Иногда это работает, в большинстве случаев это не так.Если кто-то заходит на Site1 из-за пределов нашей сети, он получает ошибку 403, и это хорошо.Если пользователь сети входит в Site1, ему разрешается входить на основании его сетевых учетных данных.Затем я проверяю роли их пользователей с помощью приведенного ниже кода.
var userName = string.Empty;
var winId = (WindowsIdentity)HttpContext.User.Identity;
var winPrincipal = new WindowsPrincipal(winId);
if(winPrincipal.IsInRole("SiteAdmin")) {
FormsAuthentication.SetAuthCookie("siteadmin", false);
userName = "siteadmin"; //This is a Forms Auth user
}
else if(///I check for other roles here and assign like above)
После того, как я проверил роли, я пересылаю их на Site2, создавая для них cookie, если пользователь находится в одной из ролей, определенных воператор if ... выше.
if(!string.IsNullOrEmpty(userName)) {
//Add a cookie that Site2 will use for Authentication
var cookie = FormsAuthentication.GetAuthCookie(userName, false);
cookie.Domain = FormsAuthentication.CookieDomain; //This may need to be changed to actually set the Domain to the Domain of the TVAP site.
HttpContext.Response.Cookies.Add(cookie);
}
//Network users not found in roles will simply be forwarded without a cookie and have to login
HttpContext.Response.RedirectPermanent(tvapUrl);
Я установил в web.config соответствующий MachineKey (validationkey, decryptionkey и validation) для каждого сайта.
Они также имеют одинаковые настройки аутентификации, за исключением режима.Так что мой конфиг для этого выглядит следующим образом.
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" name=".ASPXFORMSAUTH" protection="All" path="/" domain="mydomain.com" enableCrossAppRedirects="true" timeout="2880" />
</authentication>
Я думаю, что моя проблема в том, что режим «аутентификации» различен для каждого, поэтому Site2 не будет использовать куки-файл аутентификации от site1.Это всего лишь предположение.Можно ли как-нибудь выяснить проблему?
Согласно этой статье , то, что я собираюсь здесь, должно работать.И были времена, когда я думаю, что это сработало, но трудно сказать, так как я могу кэшировать куки и их повторно использовать.Я надеюсь, что кто-то может увидеть что-то, что мне здесь не хватает, или у него есть альтернативное решение.
ОБНОВЛЕНИЕ Я проверил мой файл cookie аутентификации на Site2 после обычного входа в систему и обнаружил, что домен не былт, поэтому я удалил эту строку кода.Кроме того, я прочитал об истечении срока действия файлов cookie, когда дата не установлена, поэтому я установил дату окончания срока действия файлов cookie перед отправкой с запросом.
Итак, с этими двумя изменениями, вот где я нахожусь.
Он работает в Chrome и Firefox, но не в IE.Точно сказать не могу.Я собираюсь провести дополнительное тестирование с другого компьютера и другого пользователя, поэтому я знаю, что у меня нет остаточных файлов cookie.