Ошибка ADFS v2.0: MSIS7042: тот же сеанс браузера клиента сделал 6 запросов за последние 1 секунду - PullRequest
6 голосов
/ 14 апреля 2010

Folks, У меня есть приложение ASP.NET MVC, которое я пытаюсь обезопасить, используя версию ADFS v2.0 Release Candidate (Женева). Я настроил приложение как доверие проверяющей стороны и использовал Fedutil.exe, чтобы изменить файл Web.config приложения, чтобы он содержал информацию о сервере в Женеве и использовал сервер в качестве источника утверждений.

Однако, когда я пытаюсь запустить приложение MVC, оно перенаправляется в Женеву, которая затем (после предупреждения о самозаверяющих сертификатах) снова перенаправляет меня в приложение MVC. После принятия обоих самозаверяющих предупреждений сертификата два сервера играют в пинг-понг друг с другом в бесконечном цикле перенаправления, пока, наконец, Женева не выдаст следующее сообщение:

В том же сеансе браузера клиента было выполнено «6» запросов за последние «1» секунды. Возможна плохая конфигурация. За подробностями обращайтесь к администратору.

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

Опять же, Женевская коробка - это кандидат на выпуск ADFS v2.0, а сайт ASP.NET MVC был создан с использованием последней (в конце '09) версии Windows Identity Foundation SDK с Web.config, измененным с помощью FedUtil.exe из WIF SDK.


Так что вы все получите удовольствие от этого ... Я попробовал это же приложение от Firefox и ... ЭТО РАБОТАЕТ. Я получаю приглашение ввести учетные данные моего домена, сервер ADFS v2 перенаправляет меня ОДИН РАЗ, и я в конечном итоге оказываюсь на домашней странице моего приложения с указанием имени учетной записи и персонализированного приветствия. Итак, теперь реальная проблема заключается в следующем: почему, черт возьми, IE8 попадает в бесконечный цикл перенаправления, а Firefox НЕ СДЕЛАЕТ ?? После дальнейшего тестирования я смог получить этот сценарий без каких-либо изменений, без каких-либо изменений в конвейере по умолчанию из ADFS v2 (RC) или из WIF (RTW) в ОБА Safari И Firefox. IE8 является ЕДИНСТВЕННЫМ браузером, который демонстрирует любые проблемы, связанные с этим сценарием аутентификации. Я перепробовал все, включая установку и доверие к самозаверяющим сертификатам, добавление сайтов в мою локальную зону интрасети, снижение безопасности и даже настройку первых И сторонних файлов cookie, чтобы всегда разрешать.

Ответы [ 5 ]

13 голосов
/ 13 октября 2010

У меня была такая же проблема с ADFS 1.0 И чтобы решить эту проблему, я убедился, что URL имеет косую черту "/", которая всегда будет работать в FireFox, а также в IE

Например: https://somedomain.com/Application_2/

7 голосов
/ 19 апреля 2010

Оказывается, имя хоста проверяющей стороны было подчеркнуто (khoffman_2). Очевидно, подчеркивание является недопустимым символом DNS, и ТОЛЬКО IE будет отклонять информацию с подчеркиванием.

Я переименовал свою машину из khoffman_2 в khoffman2, и комбинация проверяющей стороны ADFS v2 / MVC работает безупречно в Firefox, Safari и IE.

1 голос
/ 07 июня 2011

Хотя это не ваша проблема, у нас были проблемы, идентичные описанным вами. Наше решение было:

  1. Включена базовая аутентификация в IIS (это ничего не решало, но требовалось для следующих 2 шагов)
  2. Отключить проверку подлинности Windows в IIS (это решило проблему для некоторых браузеров IE, но не для всех)
  3. Отключить анонимный доступ в IIS (это решило проблему для остальных браузеров IE)
0 голосов
/ 14 февраля 2017

Этот цикл может происходить, когда пользователь не авторизован для доступа к странице.

У нас был собственный атрибут авторизации на нашем контроллере MVC, который проверяет, был ли пользователь в роли, на основе предоставленных утверждений, если параметр UseADFS был истинным в файлах конфигурации. Мне показалось, что для этого параметра задано значение true, и я был сбит с толку тем, что продолжал получать цикл adfs при доступе к странице, потому что был в группах, которым был разрешен доступ к странице.

Ключом к устранению неполадок было создание веб-страницы, на которой отображались мои претензии adfs без необходимости аутентификации.

@if (User.Identity.IsAuthenticated)
{
    <div>UserName: @User.Identity.Name;</div>

    var claimsIdentity = User.Identity as System.Security.Claims.ClaimsIdentity;
    <table>
        @foreach (var claim in claimsIdentity.Claims)
        {
        <tr><td>@claim.Type</td><td>@claim.Value</td></tr>
        }
    </table>


}

Я заметил, что я вошел в ADFS, и мои требования были установлены, поэтому ADFS работала. Фактическая проблема заключалась в том, что мой конфигурационный файл имел UserADFS = "true" вместо UseADFS = "true", что в основном заставляло мой код авторизации возвращать false при авторизации. Поэтому страница продолжала пересылать меня обратно в adfs для повторной аутентификации.

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

Кроме того, если вы написали собственный атрибут авторизации, обязательно ознакомьтесь со следующей ссылкой, в которой описано, как предотвратить цикл.

Цикл перенаправления с атрибутом .Net MVC Authorize с утверждениями ADFS

Код обработчика пользовательского HandleUnauthorizedRequest для AuthorizeAttribute по этой ссылке:

 protected override void HandleUnauthorizedRequest System.Web.Mvc.AuthorizationContext filterContext)
    {
        if (filterContext.HttpContext.Request.IsAuthenticated)
        {
            //One Strategy:
            //filterContext.Result = new System.Web.Mvc.HttpStatusCodeResult((int)System.Net.HttpStatusCode.Forbidden);

            //Another Strategy:
            filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary(
                    new
                    {
                        controller = "u",
                        action = "LoginStatus",
                        errorMessage = "Error occurred during authorization or you do not have sufficient priviliges to view this page."
                    })
                );
        }
        else
        {
            base.HandleUnauthorizedRequest(filterContext);
        }
    }
0 голосов
/ 25 июня 2014

Ответ Джаксидиана близок.

В моем случае мне нужно было только:

  • Аутентификация Windows -> Отключено

  • Анонимная авторизация -> Включено

  • Олицетворение ASP.NET -> Отключено

  • Проверка подлинности форм -> Отключено

  • Проверка подлинности Windows -> Отключено

...