【发布时间】:2020-05-26 14:40:06
【问题描述】:
我有一个提供商托管的应用程序,它使用 SharePoint 上下文过滤器对用户进行身份验证。我将第一个请求中生成的上下文令牌存储在会话变量中,并在后续调用中使用它。
当我点击站点内容中的应用程序并被重定向到提供商托管的应用程序时,一切正常。
但是,当我导航到 SharePoint Online 中的一个页面时,该页面在提供商托管的应用程序中托管了一个客户端 Webpart,会话不起作用。
在检查应用程序 webpart 和应用程序直接打开时发送的请求标头时,我发现 ASP.NET_SessionId cookie 没有存储在应用程序 webpart 中,而是直接导航提供程序托管的应用程序时。
我还发现SPCacheKey cookie 在这两种情况下都被存储,只有在通过应用程序 Web 部件加载时不会存储会话 cookie。
我在 Chrome 和 IE 中对此进行了测试,两者都给出了相同的输出。
我尝试按照link修改web.config
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="p3p" value="CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT""/>
</customHeaders>
</httpProtocol>
</system.webServer>
但这并没有解决问题。由于会话未存储,我的提供商托管应用程序中的每个 ajax 调用都被重定向到正在抛出的 appredirect.aspx
从源 https://providerhosted.domain 访问 https://tenant.sharepoint.com 的 xmlhttprequest 被 cors 策略禁止访问
为什么通过应用程序 webpart 加载时没有存储 ASP.NET 会话 ID cookie? 请帮忙
【问题讨论】:
标签: session-cookies sharepoint-online web-parts provider-hosted