Сбой проверки подлинности веб-приложения.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 переопределяется.