Веб-часть клиента, размещенная на провайдере SPO, не хранит файл cookie сеанса - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть приложение, размещенное поставщиком, которое использует фильтр контекста SharePoint для аутентификации пользователей. Я храню токен контекста, сгенерированный в первом запросе, в переменной сеанса и использую его в последующих вызовах.

Когда я нажимаю на приложение в содержимом сайта и перенаправляюсь в приложение, размещенное на провайдере, все работает хорошо.

Но когда я перехожу на страницу в SharePoint Online, на которой размещена веб-часть клиента, размещенная в приложении, размещенном поставщиком, сеанс не работает.

При проверке заголовков запросов, отправляемых приложением При открытии веб-части и приложения я обнаружил, что ASP.NET_SessionId cook ie не сохраняется в веб-части приложения, но когда приложение, размещенное на провайдере, перемещается напрямую.

Также я обнаружил, что SPCacheKey cook ie сохраняется в обоих случаях только Session cook ie не сохраняется при загрузке через веб-часть приложения.

Я проверял это в Chrome, а также IE, и оба выдавая тот же вывод.

Я попытался изменить web.config согласно этой ссылке

  <system.webServer>    
    <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>

Но это не решило проблему. Из-за того, что сеанс не сохраняется, каждый вызов ajax в приложении, размещенном на моем провайдере, перенаправляется на appredirect.aspx, который выдает

Доступ к xmlhttprequest по адресу https://tenant.sharepoint.com из источника https://providerhosted.domain заблокирован политикой cors нет доступа

Почему ASP. NET Session Id cook ie не сохраняется при загрузке через веб-часть приложения ? Пожалуйста, помогите

1 Ответ

0 голосов
/ 13 февраля 2020

После поиска решения этой проблемы с использованием множества различных ключевых слов в Google, наконец, нашли решение. Похоже, что это проблема Iframe. Когда веб-часть приложения загружается внутри iframe, cookie-файлы сеанса не сохраняются внутри iframe.

Согласно этому ответу и этой ссылке , добавляя cookieSameSite=None атрибут sessionState из web.config исправил проблему.

<sessionState cookieSameSite="None"  cookieless="false" timeout="360"> 
</sessionState>

Как обычно, это было вызвано выпуском обновления MS, который изменил значение по умолчанию cookieSameSite атрибута файлов cookie сеанса с None до Lax

...