Вопрос по – WIF-ID1014: подпись недействительна. Данные могут быть подделаны

8

Я использовал WIF для аутентификации нашего нового веб-сайта, STS основан на первоначальной реализации.

Чтобы это работало правильно в среде с балансировкой нагрузки, я использовал следующее в global.asax для переопределения поведения сертификата по умолчанию.

void onServiceConfigurationCreated(object sender, ServiceConfigurationCreatedEventArgs e)
        {
            List<CookieTransform> sessionTransforms = new List<CookieTransform>(new CookieTransform[] 
            { 
                new DeflateCookieTransform(), 
                new RsaEncryptionCookieTransform(e.ServiceConfiguration.ServiceCertificate),
                new RsaSignatureCookieTransform(e.ServiceConfiguration.ServiceCertificate)
            });

            SessionSecurityTokenHandler sessionHandler = new SessionSecurityTokenHandler(sessionTransforms.AsReadOnly());
            e.ServiceConfiguration.SecurityTokenHandlers.AddOrReplace(sessionHandler);
        }

Это все работает, просто найдите, и люди успешно используют систему, однако время от времени мы получаем взрыв:

ID1014: The signature is not valid. The data may have been tampered with.

в журналах событий, поэтому я включил трассировку WIF и увидел следующее, упомянутое в журнале.

ID1074: A CryptographicException occurred when attempting to encrypt the cookie using the ProtectedData API (see inner exception for details). If you are using IIS 7.5, this could be due to the loadUserProfile setting on the Application Pool being set to false.

У меня есть ощущение, что это ведет меня в темный переулок, как я и думал, потому что я изменил реализацию, чтобы использовать RSA, это не должно повлиять на меня.

Есть идеи, чтобы помочь мне?

Спасибо за ответ, doubled проверил все это, и он отлично работает, видит точки прерывания, перехваченные, а также выводит трассировку. У меня есть FederatedAuthentication.ServiceConfigurationCreated + = onServiceConfigurationCreated; В приложении запустите. RubbleFord

Ваш Ответ

4   ответа
2

Я изменил реализацию, чтобы изменить время ожидания в методе, созданном онтекеном. Это предотвращает переиздание.

protected override void OnSessionSecurityTokenCreated(Microsoft.IdentityModel.Web.SessionSecurityTokenCreatedEventArgs args)
        {
            args.SessionToken = FederatedAuthentication.SessionAuthenticationModule.CreateSessionSecurityToken(
                args.SessionToken.ClaimsPrincipal,
                args.SessionToken.Context,
                DateTime.UtcNow,
                DateTime.UtcNow.AddDays(365),
                true
                );
            //base.OnSessionSecurityTokenCreated(args);
        }
Спасибо, если у вас есть шанс, вы не могли бы дать мне знать?
Мне жаль, что я не могу вспомнить, мне нужно взглянуть на кодовую базу. RubbleFord
Что делает это переопределение именно с точки зрения исключения, которое вы получили?
0

Периодическое возникновение вашей ошибки в сочетании с исключением DPAPI, отображаемым в ваших трассировках, подсказывает мне, что вы фактически не переопределяете преобразование cookie, и ваша служба по-прежнему использует DPAPI.

Это может быть далеко, но в вашем фрагменте кода я заметил, что ваш метод переопределил & quot; onServiceConfigurationCreated & quot; начинается со строчной буквы o. Такая опечатка действительно помешает вам правильно переопределить стандартное поведение WIF.

4

Файлы cookie браузера зашифрованы с помощью «старых» файлов. механизм - DPAPI. Поэтому, когда сервер пытается расшифровать куки, он терпит неудачу - ваш код теперь использует RSA, а не DPAPI.

В качестве обходного пути очистите кеш браузера, и приложение запустится, как и ожидалось.

Мы никогда не использовали другую систему, поскольку мы находимся в среде с балансировкой нагрузки. RubbleFord
0

Вы пытались установить для параметра loadUserProfile значение true? Проблема все еще возникает?

(Выберите пул приложений в IIS, а затем нажмите «Расширенные настройки» справа. «Загрузить профиль пользователя» находится в разделе «Модель процесса»).

Мы не пробовали это исключительно потому, что используем RSA, а не DPAPI. RubbleFord

Похожие вопросы