Странная ошибка с WIF RTM, возникает после сброса IIS

StackOverflow https://stackoverflow.com/questions/2310353

  •  22-09-2019
  •  | 
  •  

Вопрос

Я размещаю свое веб-приложение на Windows server 2008 с IIS 7.5, У меня есть 2 веб-приложения:1.первый из них - это основная служба единого входа (sso) со страницей входа в систему.2.другое веб-приложение размещено на том же веб-сервере, который использует первое приложение для единого входа.

Я использую WIF RTM для реализации единого входа,

обычно он работает нормально, без каких-либо проблем, пользователь может войти в систему с помощью единого входа и перенаправить обратно на стартовую страницу.но когда я вхожу в систему, сначала запускаю единый вход, затем перезапускаю IIS, если я вернусь ко второму приложению и обновлю страницу, я получу следующую ошибку:

Ошибка сервера в приложении '/'.Ключ недопустим для использования в указанном состоянии.Описание:Необработанное исключение произошло во время выполнения текущего веб-запроса.Пожалуйста, просмотрите трассировку стека для получения дополнительной информации информация об ошибке и о том, где она возникла в коде.

Сведения об исключении:Система.Безопасность.Криптография.Криптографическое исключение:Ключ недопустим для использования в указанном состоянии .

Ошибка источника:Необработанное исключение было сгенерировано во время выполнения текущего веб-запроса.Информация о происхождении и местоположении исключение может быть идентифицировано с помощью приведенной ниже трассировки стека исключений.

Трассировка стека:

[Криптографическое исключение:Ключ недействителен для использования в указанном состоянии.]
Система.Безопасность.Криптография.Защищенные данные.Снять защиту (байт[] Зашифрованные данные, байт[] Необязательная энтропия, Область действия DataProtectionScope) +425
Майкрософт.IdentityModel.Web.protecteddatacookiet преобразует.Декодировать (байт[] закодировано) +59

[Исключение InvalidOperationException:ID1073:A CryptographicException возникло при попытке расшифровать файл cookie с использованием API ProtectedData (подробности см. во внутреннем разделе исключение).Если вы не использование IIS 7.5, это может быть вызвано установка loadUserProfile на Пул приложений установлен в false.] Майкрософт.IdentityModel.Web.protecteddatacookiet преобразует.Декодировать (байт[] закодировано) +151
Майкрософт.IdentityModel.Токены.SessionSecurityTokenHandler.ApplyTransforms(байт[] cookie, исходящий логический код) +109
Майкрософт.Модель идентификации.Токены.Обработчик SessionSecurityTokenHandler.ReadToken(XmlReader считыватель, SecurityTokenResolver tokenResolver) +634
Майкрософт.Идентификационная модель.Токены.Обработчик SessionSecurityTokenHandler.ReadToken(байт[] токен, SecurityTokenResolver токенРезолвер) +105
Майкрософт.IdentityModel.Web.SessionAuthenticationModule.Считывает sessionToken из Cookie(байт[] sessionCookie) +239
Майкрософт.IdentityModel.Web.SessionAuthenticationModule.Попробуйте прочитать sessionToken из Cookie (SessionSecurityToken& sessionToken) +59
Майкрософт.IdentityModel.Web.SessionAuthenticationModule.Запрос на аутентификацию (объект отправитель, EventArgs EventArgs EventArgs) +52
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Выполнить() +68 System.Web.HttpApplication.ExecuteStep(IExecutionStep шаг, логическое значение и выполняется синхронно) +75

________________________________________ Информация о версии:Microsoft .NET Версия платформы: 2.0.50727.4927;ASP.NET Версия:2.0.50727.4927

сеанс пользователя сохраняется с использованием режима сеанса SQLServer, для этого я использую специальную базу данных.

Я много перепробовал, и я не могу повторно обработать эту проблему на моем локальном компьютере (Windows7).был ли у кого-нибудь подобный опыт?можете ли вы сказать мне, как решить эту проблему?

Это было полезно?

Решение

Это вполне может быть связано с тем, что у вашего пользователя пула приложений нет постоянного профиля пользователя.Чтобы исправить это, вы можете просто запустить что-то от имени этого пользователя:

runas /user:<domain>\<user> cmd

И это создаст профиль.Впоследствии данные должны быть расшифрованы после перезапуска IIS.

Другие советы

Я, наконец, решаю эту проблему, сменив пользователя пула приложений на локального пользователя.проблема, вероятно, вызвана тем, что единый вход размещен на 64-разрядной ОС, этой проблемы не существует, если я размещаю единый вход на 32-разрядном компьютере (даже если я использую пользователя домена для пула приложений).

Теперь я использую ApplicationPoolIdentity или сетевую службу, исключение исчезло после перезапуска IIS.

Спасибо всем вам, ребята, и я так рад поделиться с вами своим решением.

Похоже, что существует какая-то проблема безопасности, когда у вас есть несколько приложений, совместно использующих один и тот же домен на Win Server 2008 с IIS 7.5

Если у вас есть URL-адреса http://ourdomain.com/app1 и http://ourdomain.com/app2 вы можете войти в одно приложение с помощью WIF, но когда вы заходите в другое приложение, вы получаете эту ошибку.Это связано с тем, что файл cookie предназначен для домена, но если он создан app1, то app2 не может получить к нему доступ.

Итак, решение состоит в том, чтобы либо поступить как Aaron и использовать определенного пользователя с правами доступа, либо, как мы сделали, разделить приложения на два разных домена, т.е. http://app1domain.com/ и http://app2domain.com/.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top