SPO 提供程序托管的客户端 Web 部件不存储会话 Cookie



>我有一个提供程序托管的应用程序,该应用程序使用SharePoint Context 筛选器对用户进行身份验证。我将第一个请求中生成的上下文令牌存储在会话变量中,并在后续调用中使用它。

当我单击网站内容中的应用程序并重定向到提供商托管的应用程序时,一切正常。

但是,当我导航到 SharePoint Online 中的页面时,该页面在提供程序托管的应用程序中托管了客户端 Web 部件,会话不起作用。

在检查应用程序 Web 部件和应用程序直接打开时发送的请求标头时,我发现ASP.NET_SessionIdcookie 没有存储在应用程序 Web 部件中,而是直接导航提供程序托管的应用程序时。

我还发现SPCacheKeycookie 在这两种情况下都被存储,只有会话 cookie 在通过应用程序 Web 部件加载时没有被存储。

我在 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这会引发

源 https://tenant.sharepoint.com 访问 xmlhttprequest https://providerhosted.domain 被 cors 策略阻止 无访问权限

为什么通过应用程序 Web 部件加载时不存储 ASP.NET 会话 ID Cookie? 请帮忙

在谷歌中使用许多不同的关键字搜索此问题的解决方案后,终于找到了解决方案。看起来这是一个 Iframe 问题。当应用程序 Web 部件在 iframe 中加载时,会话 Cookie 不会存储在 iframe 中。

根据此答案和此链接,在sessionState中添加cookieSameSite=None属性web.config解决了该问题。

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

像往常一样,这是由MS发布的更新版本引起的,该更新版本将会话cookiecookieSameSite属性的默认值从None更改为Lax

相关内容

  • 没有找到相关文章

最新更新