0

У меня проблема с iframes и cookies в многодоменном веб-приложении.

Как раз перед тем, как я начну, я очень хорошо знаю, что приложение 1 в домене 1 не может получить доступ или установить файл cookie приложения2 на домен2. Так что это не проблема новичка.IE тихо отбрасывает файлы cookie на странице iframe (SSL)?

Проблема заключается в следующем:
У меня есть WEBSITE1, расположенный в https://test.xyz-abc.ch/FM_xyz/w8/index.html

и а ReportServer (WEBSITE2), расположенный в https://www8.company-asp.ch/ReportServer

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

Я положил это содержание

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <title>Test Page</title> 
    </head> 

<body> 
    <iframe src="www8.company-asp.ch/ReportServer/login.aspx" width="1000" height="1000" ></iframe> 
</body> 
</html> 

в файл «ifrm.html» с URL
https://test.xyz-abc.ch/FM_xyz/w8/ifrm.html

Теперь независимо от того, что я ставлю, как имя пользователя/пароль в форме ReportServer, он не работает (имя пользователя и пароль 120% правильно, и существует и имеют все необходимые разрешения).

Если я делаю то же самое в Google Chrome или Firefox, то он работает, я могу войти в приложение-отчет, содержащееся в iframe.

Но в Internet Explorer вы можете (пытаться) войти, но всегда оставаться на экране входа в систему, потому что по неизвестной причине он либо не создает cookie, либо не отправляет cookie.

Если я запускаю сервер отчетов за пределами iframe, я могу войти в систему и открыть отчеты в Internet Exploder.
Обратите внимание, что ReportServer работает в режиме проверки подлинности с помощью файлов cookie, а не в Windows Authentication.

Кроме того, проблема не является специфичной для ReportServer, я могу разместить любое приложение, которое использует файлы cookie для аутентификации там, и они также терпят неудачу - но только в Internet Exploder все отлично работает в Chrome и Firefox.

Я нахожу это странным, так как - если я запускаю того же приложения (site1) на
https://www6.company-asp.ch/FM_xyz/w8/index.html
и имеют ReportServer на том же домене, в
https://www8.company-asp.ch/ReportServer
, то он работает.

Кто-нибудь знает, в чем проблема или может быть (я имею в виду, кроме того, что IE является частью программного обеспечения sh * t)?
Единственное, что я могу представить в качестве разницы между рабочим и нерабочим вариантом, это то, что основной домен (поддомен отличается в обоих примерах) отличается.

Является ли это (по дизайну) проблемой SSL в IE (= серьезная ошибка?), Или это может быть проблемой при неправильной настройке SSL/SSL-сертификата?

Edit:
Да, я знаю, что могу отключить его, как в <see below>, но это не является приемлемым решением.Я не могу сказать клиенту рассказать всем своим сотрудникам об изменении этого параметра в своем IE. Во-первых, это никогда не работает, во-вторых, у них может не быть разрешения на изменение этих параметров, в-третьих, ИТ-отдел может не разрешить его по каким-либо причинам, а в-четвертых, потому что глупо просить клиентов изменить параметры своих браузеров. .
P3P

Edit 2:
Это получить хуже. Это P3P, я получил его для работы в тестовом домене, используя заголовок P3P через web.config.
Но нельзя добавить заголовки P3P в web.config ReportServer, поскольку он работает на каком-то внутреннем IIS6.

+1

Хм, может быть p3p http: // stackoverflow.com/questions/389456/cookie-blocked-not-saved-in-iframe-in-internet-explorer –

ответ

0

Это действительно работа P3P.
Превосходный уровень троллинга IE.

The solution:

Здравомыслящий способ исправить это, как правило, чтобы добавить пользовательский заголовок раздела system.webServer файла web.config.

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false"/> 


    <httpProtocol> 
     <customHeaders> 
      <add name="p3p" value="CP=&quot;IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT&quot;"/> 
     </customHeaders> 
    </httpProtocol> 
</system.webServer> 

Однако, поскольку SSRS в-сане, они используют IIS6/Кассини внутренне (даже тогда, когда в операционной системе с IIS 7.5). Итак, вы не можете просто добавлять заголовки в файл web.config, потому что system.webServer - IIS7 +.

Ввод заголовков с инлайн-тегов в ASPX страниц не хватает, либо, не работает

<% 
    System.Web.HttpContext.Current.Response.AppendHeader("P3P", "CP=\\\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\\\""); 
%> 

Так что вам нужно, чтобы написать пользовательский-HTTP-модуль, который добавляет P3P-заголовок на каждый ответ ...
Это было бы просто, если бы ASP.NET не был бы ошибкой и не вызывал EndRequest до конца запроса, а затем снова один раз после отправки запроса ...

Так что это окончательный результат:

namespace CustomHttpHeaders 
{ 


    public class CustomHttpHeaderModule : System.Web.IHttpModule 
    { 


     public void Dispose() 
     { 
      // CustomHttpHeaders.CustomHttpHeaderModule mod = new CustomHttpHeaderModule(); 
     } 


     public void Init(System.Web.HttpApplication context) 
     { 
      // context.BeginRequest += new System.EventHandler(context_BeginRequest); 
      context.EndRequest += new System.EventHandler(context_EndRequest); 
     } 


     void context_BeginRequest(object sender, System.EventArgs e) 
     { 
      if (System.Web.HttpContext.Current != null && System.Web.HttpContext.Current.Request != null) 
      { 
       System.Web.HttpRequest request = System.Web.HttpContext.Current.Request; 
       // request.Headers.Add("name", "value"); 
      } // End if (System.Web.HttpContext.Current != null && System.Web.HttpContext.Current.Response != null) 
     } 


     void context_EndRequest(object sender, System.EventArgs e) 
     { 
      if (System.Web.HttpContext.Current != null && System.Web.HttpContext.Current.Response != null) 
      { 
       System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; 

       try 
       { 
        // OMG - WTF ??? non-redundant redundancy ^3 
        // response.Headers["P3P"] = "CP=\\\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\\\"": 
        // response.Headers.Set("P3P", "CP=\\\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\\\""); 
        // response.AddHeader("P3P", "CP=\\\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\\\""); 
        response.AppendHeader("P3P", "CP=\\\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\\\""); 
       } 
       catch(System.Exception ex) 
       { 
        // WTF ? 
        System.Console.WriteLine(ex.Message); // Suppress warning 
       } 

      } // End if (System.Web.HttpContext.Current != null && System.Web.HttpContext.Current.Response != null) 

     } // End Using context_EndRequest 


    } // End Class myHTTPHeaderModule 


} // End Namespace CustomHttpHeaders 

И затем вы можете добавить CustomHttpHeaderModule в файл web.config ReportServer.
Weeeee: O =

[...] 
    <httpModules> 
    <clear /> 
    <add name="CustomHttpHeaders" type="CustomHttpHeaders.CustomHttpHeaderModule, CustomHttpHeaders" /> 
    </httpModules> 

</system.web> 

Если вы хотите отладить его в Visual Studio 2013 (IIS Express), вам нужно это, а также (в файле web.config)

<system.webServer> 
<validation validateIntegratedModeConfiguration="false"/> 

<modules runAllManagedModulesForAllRequests="true" > 
    <add name="CustomHttpHeaders" type="CustomHttpHeaders.CustomHttpHeaderModule, CustomHttpHeaders" /> 
</modules> 


<!-- 
<httpProtocol> 
    <customHeaders> 
     <add name="p3p" value="CP=&quot;IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT&quot;"/> 
    </customHeaders> 
</httpProtocol> 
--> 
0

Попробуйте это:

1.Откройте Internet Explorer, выберите Tools | Обозревателя

2.Click вкладка Безопасность

3.Choose зона Интернет

4.Scroll вниз "Запуск программ и файлов в IFRAME"

5.Select Включить

6.Нажмите OK

+0

Отлично, тогда он запускается на моем компьютере, но не на клиентах;) Если вы называете это решением, укажите нуль -день, который можно нанести на базовую страницу, которая делает это. И на самом деле, это под «конфиденциальностью» -> «Дополнительно» -> «Отключить автоматическую обработку файлов cookie», –

 Смежные вопросы

  • Нет связанных вопросов^_^