В этой теме рассматриваются известные проблемы Windows® Identity Foundation (WIF), а также способы их решения.

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

Симптом

Сценарии пассивной федерации заканчиваются сбоем со следующим сообщением об ошибке в приложении проверяющей стороны.

В клиенте обнаружено потенциально опасное значение Request.Form…

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

Причина

В сценариях пассивной федерации, в которых используется элемент управления WIF FederatedPassiveSignIn, маркеры безопасности передаются обратно приложениям проверяющей стороны в виде строки. ASP.NET считает передачу таких маркеров потенциальной атакой на веб-сайт и в качестве меры предосторожности прерывает обработку запроса.

Решение

Отключите функцию проверки запросов ASP.NET. Для этого в ASPX-файле веб-страницы присвойте параметру Page ValidateRequest следующее значение.

  Копировать код
<%@ Page ValidateRequest="false"%>

Иначе в файле Web.config веб-приложения присвойте атрибуту validateRequest в разделе <pages/> значение false.

  Копировать код
<configuration> <system.web> <pages validateRequest="false" /> </system.web> </configuration>
Примечание.
Проверка запросов ASP.NET создана для сокращения рисков атак методом запуска сценариев между сайтами для веб-страниц и приложений ASP.NET. Приложение, которое не выполняет надлежащей проверки пользовательского ввода, подвергается опасности различных типов атак с использованием специально сформированного вредоносного ввода. К ним относятся атаки методом запуска сценариев между сайтами и путем внедрения кода SQL Server. Необходимо тщательно анализировать все типы ввода в приложении, а также проверять, что ввод допустим или зашифрован, либо что приложение блокируется перед обработкой данных и их отправкой обратно клиенту. Заменить это другим универсальным методом невозможно. Дополнительные сведения о запуске сценариев между сайтами см. в Уведомлении о вредоносных тегах HTML на сайте группы CERT Университета Карнеги-Меллона. Дополнительные сведения о проверке запросов см. в соответствующем техническом документе на сайте www.asp.net.

Программа SVCUtil вызывает исключение

Симптом

При наличии проверяющей стороны, созданной на базе WCF, настроенной с привязкой федерации, где адрес поставщика указывает на службу STS, у которой имеется не менее 5 конечных точек и которая построена с использованием WIF, при запуске служебной программы svcutil.exe для проверяющей стороны, она вызывает следующее исключение:

  Копировать код
Microsoft (R) Service Model Metadata Tool [Microsoft (R) Windows (R) Communication Foundation, Version 3.0.4506.2088] Copyright (c) Microsoft Corporation.  All rights reserved.

Attempting to download metadata from 'http://localhost:8008/RP/mex' using WS-Metadata Exchange or DISCO. Error: Obtaining metadata from issuer 'http://localhost:8000/Sts/mex' failed with error 'System.InvalidOperationException: Metadata contains a reference that cannot be resolved: 'http://localhost:8000/Sts/mex'. ---> System.ServiceModel.CommunicationException: The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element. ---> System.ServiceModel.QuotaExceededException: The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.

Причина

Служебная программа Svcutil.exe поставляется вместе с .NET Framework 3.5 и может использоваться для создания прокси-сервера и конфигурации для взаимодействия с веб-службой путем загрузки WSDL-кода службы. Эта программа также может создавать прокси-серверы для служб, которые участвуют в федеративной связи со службой STS. По умолчанию программа может загружать WSDL-код объемом в 64 КБ. Служба маркеров безопасность с пятью или большим числом конечных точек создает WSDL-код, размер которого превышает 64 КБ, в результате чего вызывается исключение о превышении максимального размера сообщения.

Решение

В программе svcutil.exe можно увеличить максимальный размер. Svcutil.exe.config — это образец конфигурации, который поставляется вместе с WIF и находится в папке установки WIF. Этот образец конфигурации позволяет svcutil.exe считывать WSDL-код, созданный службой STS, объемом до 64 МБ. Эта конфигурация используется для всех четырех транспортов (http, https, net.tcp и net.pipe), по которым WSDL-код может предоставляться в WCF, и увеличивает максимальный размер WSDL-кода для всех них. Для использования этого файла конфигурации скопируйте его в каталог, где находится svcutil.exe, а затем запустите svcutil.exe. Обратите внимание, что эта проблема не возникает для клиентов Windows CardSpace.

После включения Windows Identity Foundation в приложениях WCF перестал работать пользовательский диспетчер проверки подлинности

Симптом

При наличии реализованного пользовательского диспетчера проверки подлинности он перестает работать после включения WIF с помощью метода ConfigureServiceHost.

Причина

WIF заменяет диспетчер проверки подлинности служб по умолчанию своим собственным для обеспечения полной интеграции со средой размещения WCF. Если настроить диспетчер проверки подлинности служб до вызова метода ConfigureServiceHost, WIF заменит пользовательский диспетчер проверки подлинности служб на версию WIF.

Решение

Дополнительные сведения см. в разделе Совместимость приложений WCF.

Проверяющая сторона ASP.NET вызывает исключение, когда mapToWindows имеет значение True, а useWindowsTokenService — False

Симптом

Следующее исключение вызывается в проверяющей стороне ASP.NET, настроенной с использованием Saml11SecurityTokenHandler или Saml2SecurityTokenHandler, в которой MapToWindows имеет значение true, а значение атрибута UseWindowsTokenService в элементе SamlSecurityTokenRequirement равно false:

  Копировать код
Server Error in '/ClaimsAwareWebApp' Application. ________________________________________ Either a required impersonation level was not provided, or the provided impersonation level is invalid. (Exception from HRESULT: 0x80070542) 

Решение

Всегда задавайте свойствам MapToWindows и UseWindowsTokenService в элементе SamlSecurityTokenRequirement значение true.

В файле HttpCookie, записываемом Windows Identity Foundation, свойство Secure по умолчанию получает значение False

Симптом

В файлах HttpCookie, записываемых WIF, свойство Secure по умолчанию получает значение false. На веб-сайте может иметься страница входа, защищенная средствами SSL, при том, что для внутренних страниц такая защита отсутствует. Если файл HttpCookie небезопасен, клиент будет отправлять его с каждым запросом к веб-сайту, независимо от того, запрашивается ли страница, защищенная SSL, или нет. Это позволяет другим клиентам перехватывать cookie-файл и использовать его для доступа к другим страницам, не защищенным с помощью SSL.

Решение

Всегда задавайте свойству Secure файла HttpCookie значение true. Это гарантирует, что клиент будет отправлять cookie-файл только при запросе страницы, защищенной с помощью SSL.

CreateChannelActingAs и CreateChannelOnBehalfOf завершаются сбоем для нескольких вызовов в одном канале

Симптомы

При использовании канала, созданного с помощью метода CreateChannelActingAs или CreateChannelOnBehalfOf для нескольких вызовов WIF может вызывать исключение.

Решение

Существует три решения этой проблемы.

  1. Разрешить сеансы для серверной службы.

  2. Создавать один канал на вызов.

  3. Использовать WSTrustChannel и CreateChannelWithIssuedToken.