Сбой проверки подлинности веб-приложения.NET 2.0: "Предоставленный билет недействителен"

У меня есть приложение.NET 4.0 с приложением 2.0 в детстве. Веб-приложения не находятся в многосерверной среде; только один сервер участвует в обслуживании этих запросов. Оба приложения используют пользовательскую аутентификацию, и оба приложения имеют одинаковую machineKey атрибуты и значения. Когда я захожу в приложение 2.0, журнал событий показывает следующее сообщение:

Event code: 4005 
Event message: Forms authentication failed for the request. Reason: The ticket supplied was invalid. 
Event time: 12/2/2011 11:36:49 AM 
Event time (UTC): 12/2/2011 5:36:49 PM 
Event ID: 2068ad6957964f75885301fc2b58ddfe 
Event sequence: 2 
Event occurrence: 1 
Event detail code: 50201

Я пытался установить ticketCompatibilityMode Атрибут Framework20 в элементе формы в Web.config, но это не решило проблему. Из-за этой ошибки пользователь не авторизуется, и в результате обычные объекты (HttpContext) не заполняются пользовательской информацией.

Кто-нибудь знает, как исправить эту ошибку, чтобы аутентификация работала для приложения 2.0? (Кроме того, я планирую обновить приложение 2.0 до 4.0, но в настоящее время его не хватает)

5 ответов

Решение

Если кто-то сталкивался с такой же проблемой, я смог исправить эту ошибку, добавив несколько записей в <appSettings> раздел Web.config моего приложения.NET 2.0. Добавленные записи были:

<add key="aspnet:UseLegacyEncryption" value="true" />
<add key="aspnet:UseLegacyMachineKeyEncryption" value="true" />

Изменить (2012-05-04): После установки бюллетеня по безопасности MS11-100 на сервере, аутентификация снова сломалась в приложении 2.0. Добавление следующего в Web.config приложения 4.0 устранило проблему:

<add key="aspnet:UseLegacyFormsAuthenticationTicketCompatibility" value="true" />

У вас должны быть одинаковые рамки для 2 приложений.

httpRuntime targetFramework = "4.5"

Есть и еще одна причина этой проблемы. Даже на той же машине, тот же IIS и тот же.NET Framework, если одно из ваших приложений имеет

<httpRuntime requestValidationMode="2.0" />

тогда обмен аутентификационным cookie не будет работать.

Удаление requestValidationMode решает проблему. Но иногда вы не можете сделать это, и оно должно оставаться там. Мне еще предстоит выяснить, что делать в такой ситуации

С целью передачи информации к предыдущему сообщению, это работает для меня, добавив эти ключи в приложение (оба 4.0) web.config:

    <add key="aspnet:UseLegacyEncryption" value="true" />
    <add key="aspnet:UseLegacyFormsAuthenticationTicketCompatibility" value="true" />

Я была такая же проблема. В моем случае у меня было два разных приложения на одном сервере, и атрибут name был одинаковым для обоих.

Решение состоит в том, чтобы использовать уникальное имя для каждого приложения. Подробности о режиме смотрите здесь https://msdn.microsoft.com/en-us/library/1d3t3c61(v=vs.85).aspx

Это имя cookie, и если вы используете то же имя, cookie переопределяется.

Другие вопросы по тегам