Я понял это.
Механизм безопасности IIS по умолчанию для защиты страниц (т. Е. Раздел system.web / authorization) бесполезен при использовании MVC, потому что с MVC вы не защищаете реальные физические страницы или пути, а скорее контроллеры и действия, на которые ссылаются виртуальные пути называется "маршруты".
Вместо того, чтобы защищать все одной строкой в web.config, вы должны не забыть добавить атрибут [Authorize] для каждого действия, которое вы хотите защитить (или для каждого класса контроллера, для которого вы хотите, чтобы все действия были защищены), потому что все доступно по умолчанию. Это означает, что ваша безопасность основана на коде в MVC, а не на web.config, поэтому вы не можете изменить настройки без перекомпиляции.
Точная проблема заключалась в том, что я защищал корневой каталог приложения с помощью раздела авторизации и не смог добавить исключения для физических подпутей ... потому что на самом деле их нет в MVC ... все это обрабатывается маршрутизацией модуль. Поэтому при посещении корня без каких-либо исключений модуль проверки подлинности с надписью говорил «нет, вы не можете получить доступ к корневому пути» и немедленно обслуживал страницу входа в систему и добавлял перенаправление обратно в защищенный корень.
Обычно при наличии маршрута по умолчанию перейти к Account / LogOn было бы хорошо, потому что Account / LogOn имеет код для перенаправления на Home / Index в отсутствие returnUrl. Однако в этом случае раздел авторизации вызывал генерирование returnUrl при аутентификации форм, что сводило на нет способность действия Account / LogOn выполнять перенаправление по умолчанию. Изменение маршрута по умолчанию на Home / Index решило эту проблему; однако это привело к тому, что URL браузера стал неправильным, и именно тогда я столкнулся с проблемой определения URL как «../Content/image.jpg», а не @ Url.Content («~ / Content / image.jpg»).
Итак, как вы можете видеть, это была сложная, многогранная проблема, возникшая в результате столкновения архитектур.
См .: Проблема с авторизацией с IIS и MVC
и
См .: Как разрешить всем пользователям доступ к одному маршруту на веб-сайте с интегрированной аутентификацией?
Подводя итог, можно сказать, что хорошими предложениями были: 1: маршрут по умолчанию должен идти домой, а не вход в систему, 2: убедитесь, что среда генерирует URL-адреса содержимого относительно корня приложения, 3: добавьте к действию http-get страницы входа a перенаправить на дом, если Request.IsAuthenticated имеет значение true, и 4: использовать атрибут [Authorize] для защиты методов действия.