Эудженио направил меня в правильном направлении.Но пример, на который он ссылается, больше не работает в ASP.NET 4.5.Как я уже прокомментировал его ответ, это приводит к переполнению стека.Это потому, что проверка запросов теперь выполняется, когда запрашиваются данные.Таким образом, проверка выполняется, когда WSFederationMessage.CreateFromFormPost запрашивает данные.Это вызывает наш запрос валидатора.И этот requestvalidator снова вызывает WSFederationMessage.CreateFromFormPost и так далее.После некоторого копания в коде WIF у меня теперь есть немного измененный requestvalidator, который работает.Вместо CreateFromFormPost мы используем CreateFromNameValueCollection (который также используется CreateFromFormPost), но теперь мы можем передать его с помощью Request.Unvalidated.Form.
public class RequestValidator : System.Web.Util.RequestValidator
{
protected override bool IsValidRequestString(HttpContext context, string value, RequestValidationSource requestValidationSource, string collectionKey, out int validationFailureIndex)
{
validationFailureIndex = 0;
if (requestValidationSource == RequestValidationSource.Form &&
collectionKey.Equals(WSFederationConstants.Parameters.Result, StringComparison.Ordinal))
{
if (WSFederationMessage.CreateFromNameValueCollection(WSFederationMessage.GetBaseUrl(context.Request.Url), context.Request.Unvalidated.Form) as SignInResponseMessage != null)
{
return true;
}
}
return base.IsValidRequestString(context, value, requestValidationSource, collectionKey, out validationFailureIndex);
}
}