如何在 Sharepoint Online 中启用 CORS

Posted

技术标签:

【中文标题】如何在 Sharepoint Online 中启用 CORS【英文标题】:How to enable CORS in Sharepoint Online 【发布时间】:2020-01-13 03:10:38 【问题描述】:

我正在尝试在我的反应应用程序中实现共享点文件浏览器。使用microsoft/file-browser 对此ans 代码如下。但是得到xxx... from origin 'http://localhost:3000' has been blocked by CORS policy

关于如何为此启用 CORS 的任何想法

import * as React from "react";

import  GraphFileBrowser  from '@microsoft/file-browser';

class App extends React.Component 


  getAuthenticationToken() 
    return new Promise<string>(resolve => 
      resolve(
        "VALID TOKEN"
      );
    );
  

  render() 
    return (
      <GraphFileBrowser
        getAuthenticationToken=this.getAuthenticationToken
        onSuccess=(selectedKeys: any[]) => console.log(selectedKeys)
        onCancel=(err: Error) => console.log(err.message)
        endpoint='https://XXX.sharepoint.com'

      />
    );
  


export default App;

【问题讨论】:

Sharepoint 很麻烦。我正在使用 Angular,它有一个名为 proxyconfig 的功能,如果您没有来自 webpack 开发服务器的使用代理,则会做出反应。我指向 Sharepoint 网站,可以轻松工作。如果您仍然不能这样做,请启动代理服务器和代理请求,因此没有 OPTIONS 飞行前请求或任何其他 cors 问题会困扰您 我的 ADFS 存在 CORS 问题。我不喜欢代理方式,但我实现了将请求代理到 ADFS 的自定义端点。 【参考方案1】:

据我所知,CORS 错误不是因为 SharePoint 而发生,而是因为您的浏览器。这里的问题是您正在尝试将资源从 xxx.sharepoint.com 加载到 localhost(默认情况下从未添加为 CORS 中接受的内容)

因此,一种解决方案是使用对 CORS 不敏感的浏览器。这可能是:

cd "C:\Program Files (x86)\Google\Chrome\Application"
chrome.exe --disable-web-security --user-data-dir="C:\tmp"

此 sn-p 使用用户数据目录“C:\tmp”启动您的 Google Chrome,而不使用“网络安全”(包括 CORS)。

请记住,此解决方法仅适用于开发。在生产中你不应该使用 localhost...

https://www.thepolyglotdeveloper.com/2014/08/bypass-cors-errors-testing-apis-locally/

【讨论】:

我之前在我的一个 SharePoint 和 Angular 组合项目中所做的完全相同,并且工作正常。【参考方案2】:

您正在访问的 Web 应用程序支持(或不支持)CORS。以前版本的 SharePoint 很少或根本没有 CORS 支持。

SharePoint 2016 及更高版本要求您对所有 CORS 调用使用 OAuth。这可以使用低/高信任加载项令牌或 AAD 应用程序令牌来完成。 SharePoint 识别的任何有效 OAuth 令牌都可以使用。这是一个广泛的主题,但您可以在此处阅读插件身份验证 - Authorization and authentication of SharePoint Add-ins

在以前的 SharePoint 版本(2013 及更早版本)中,您可以使用 IIS 中的 URL 重写规则或响应标头来伪造当时 SharePoint 中缺乏的 CORS 支持。现在它支持它,你不能伪造它,它需要身份验证。

更多信息在这里- Fixing issue in making cross domain ajax call to SharePoint rest

【讨论】:

【参考方案3】:

现代浏览器默认阻止跨源资源共享(在 javascript API 中)。

您的生产服务器必须是 CORS-enabled 才能处理来自不同域的 Web 应用程序中的跨域 Ajax 请求。但是,如果您只需要绕过它进行开发,请尝试使用Allow CORS: Access-Control-Allow-Origin chrome 扩展,它可以让您启用/禁用 CORS 检查。

【讨论】:

Microsoft 控制此处的生产服务器,因为这是关于 SharePoint Online 的问题。 SPO 网站始终是https://&lt;your-tenant-name&gt;.sharepoint.com 域的子网站。

以上是关于如何在 Sharepoint Online 中启用 CORS的主要内容,如果未能解决你的问题,请参考以下文章

SharePoint Online 站点启用内容编辑器部件

SharePoint Online office 365缺少将站点另存为模板选项

需要使用 PnP PowerShell 在 SharePoint Online 中添加语言翻译器

如何在 SharePoint Online 页面布局中引用 Jquery?

如何解决在同一 SharePoint Online 网站中使用 Excel 创建列表时在 SharePoint 中弹出的错误

如何在 SharePoint Online 中自定义 SharePoint Designer 工作流任务表单?