Совместимость форм IIS6 и IIS7 - PullRequest
3 голосов
/ 25 ноября 2010

Справочная информация:

У меня есть два веб-приложения, настроенные на разных веб-серверах, которые в настоящее время являются IIS6.Приложение 1 (A1 - a1.domain.com) использует cookie-файлы для проверки подлинности форм, установленные приложением 2 (A2 - a2.domain.com).

В файле web.config у меня есть:

<authentication mode="Forms">
<forms name=".ASPXAUTH" domain="domain.com"  protection="All" path="/" loginUrl="http://a2.domain.com/login.aspx" timeout="60" />
</authentication>

В A2 web.config у меня есть:

<authentication mode="Forms">
<forms name=".ASPXAUTH" domain="domain.com"  protection="All" path="/" loginUrl="login.aspx" timeout="60" />
</authentication>

Эти два приложения также совместно используют значения machineKey в web.config

Это прекрасно работает без каких-либо проблем.

Проблема:

Я обновляю A1, чтобы использовать .NET 4.0 и работать в IIS7, и теперь аутентификация с использованием общих форм не работает.Я все еще перенаправлен на правильную страницу входа на А2 и вижу, что он устанавливает cookie-файл аутентификации, но когда я возвращаюсь к А1, аутентификация завершается неудачно со следующей ошибкой (из Event Viewer):

Проверка подлинности форм не удалась для запроса.Причина: предоставленный билет недействителен.

Я пытался:

  • Настройка обновленной версии A1 в IIS6 (это работало - поэтому проблем совместимости междуавторизация в разных версиях .NET в IIS6)

  • Настройка обновленного A1 в IIS7 с использованием локальной страницы входа, то есть скопированной страницы входа из A2 в A1 и установки A1 loginUrl = "login.aspx"(также работает)

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

Кто-нибудь знает, как это решить?

1 Ответ

2 голосов
/ 25 ноября 2010

В .NET 4.0 изменился способ шифрования билетов аутентификации.Если вы хотите быть совместимым со старыми версиями, вы можете установить атрибут ticketCompatibilityMode следующим образом:

<forms 
    loginUrl="/Login.aspx" 
    timeout="2880" 
    ticketCompatibilityMode="Framework20"
    domain="domain.com"
/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...