Назад | Перейти на главную страницу

IIS 7.5 Siteminder не защищает запросы ASP.net MVC

Мы пытаемся использовать ASP.Net MVC с Siteminder для единого входа. Это на Windows Server 2008 R2 с IIS 7.5. Агент Siteminder версии 6QMR6.

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

Как настроить в IIS 7.5, чтобы не проверять наличие файла перед аутентификацией с помощью Siteminder. SiteMinderWebAgent - это обработчик (карта сценария WildCard), который мы создали с помощью ISAPI6WebAgent.dll.

Как защитить запрос ASP.Net MVC с помощью Siteminder? (Добавил, потому что мой предыдущий вопрос не решил проблему). Запрос MVC отображается в журнале IIS, но не в журнале Siteminder.

Обновить : Служба поддержки Microsoft сообщает, что в настоящее время IIS7.5 даже в более ранних версиях не поддерживает сопоставления с подстановочными знаками на любых двух обработчиках Isapi с подстановочными знаками *. В настоящее время в моем случае Siteminder имеет * подстановочный знак, а asp.net mvc (обработчик - aspnet_isapi) имеет * подстановочный знак для обработки запросов. Упорядоченный приоритет не работает в случае сопоставления подстановочных знаков с Just *. Не убедил в ответе, но подожду до завтра, чтобы они вернулись.

Обновите Siteminder до последней версии, удалите все ISAPI, перейдите из ClassicMode в IntegratedMode, если потребуется MVC / WEB API, затем используйте только CASiteMinderWebagentModule

и забудьте обо всей глупости взлома MVC / Webapi, потому что ISAPi и siteminder, MVC / Webapi никогда не создавались для работы в ClassicMode.

Это можно сделать из диспетчера IIS, отредактировав обработчик для Siteminder, щелкнув «Ограничения запроса» и убедившись, что флажок «Сопоставление» снят.

В качестве альтернативы, если вы делаете это непосредственно из applicationHost.config, установите для параметра resourceType значение «Unspecified». Это заставит обработчик обрабатывать все запросы, независимо от того, существует ли файл или папка.

Вот объяснение и обходной путь от Microsoft для ASP.Net MVC с Siteminder.

Запрос может быть выполнен любым ОДНИМ обработчиком, но может обрабатываться несколькими модулями. Когда запрос поступает в URLRoutingModule, он направляет запросы обработчику для MVC (если карта для него существует в таблице маршрутизации, как определено в событии Application_Start файла Global.asax), и обработчик SiteMinder никогда не вызывается. Поскольку только один обработчик может выполнить запрос, и в этом случае это должен быть обработчик MVC, страница входа в систему SiteMinder никогда не появляется. Один обработчик, выполняющий запрос, является конструктивным поведением.

Предлагаемое решение:

i) В методе AuthenticateRequest в Global.asax проверьте, есть ли в запросе файл cookie сеанса SSO.

ii) Если файла cookie нет, выполните перенаправление на другую страницу входа в систему единого входа.

iii) Страница входа, отвечающая за аутентификацию, не должна быть в таблице маршрутизации MVC.

iv) Если поступает запрос для страницы, которой нет в таблице маршрутизации MVC, SiteMinder вступит в действие, поскольку URLMappingsModule не будет направлять его в обработчик MVC, как ожидалось.

v) На этой странице после аутентификации пользователь может быть перенаправлен на основной URL-адрес, запрошенный ранее. Поскольку на этот раз у нас есть файл cookie сеанса единого входа, запрос не будет перенаправлен в AuthenticateRequest, и на него будет отвечать MVC.

Мы следим за этой работой. Это должно быть реализовано с осторожностью, так как есть вероятность, что cookie Siteminder может быть признан недействительным, но не проверен сайтом, поскольку запрос не будет проходить через Siteminder для запросов MVC.

Наша команда по инфраструктуре SiteMinder предложила мне попробовать включить объявление обработчика веб-агента в web.config файл, указанный перед обработчиком MVC, например:

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />    
    <handlers>
        <add name="wa-handler" path="*" verb="*" type="" modules="IsapiModule" scriptProcessor="%NETE_WA_PATH%\ISAPI6WebAgent.dll" resourceType="Unspecified" requireAccess="None" allowPathInfo="false" preCondition="" responseBufferLimit="4194304" />
        <add name="MVC" path="*" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" preCondition="" />            
    </handlers>
</system.webServer>

Это сработало для нас и не потребовало каких-либо специальных обходных решений (например, с помощью обнаружения файлов cookie / заголовков и перенаправления URL-адресов) в Global.asax.

У меня была такая же проблема на моем сайте MVC-2, хотя виртуальная папка была защищена Siteminder.

Наконец разобрался, в чем была проблема.

Изменил режим пула приложений с интегрированного на классический и вуаля! задача решена. Не вносил никаких изменений в конфигурацию.