ajax 获取对 Office365 REST 的请求 Api CORS 失败?

ajax get request to Office365 REST Api fails CORS?

我正在尝试从我的本地服务器向 Office365 RESTful API 服务发出 ajax GET 请求,但是 运行 到 cross-domain HTTPRequest 错误。以下是我的 'get-files-at-root' 尝试的示例:

$.ajax({
  url: 'https://[sharepoint_site]/_api/v1.0/me/files?access_token='+token,
  type: 'get',
  dataType: 'json',
  success: function(data) {
    if (success){
      success(data);
    }
  },
  error: error
})

我从服务器收到以下响应:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. The response had HTTP status code 403.

我试过将访问令牌作为 header 参数发送:

headers: {'Authorization': 'Bearer '+ token}

但这有相同的结果。

对我做错了什么有什么想法吗?

(背景:我正在尝试在客户端上创建自己的 Office365 'file picker',因为我找不到提供此功能的 OneDrive Business 可用库。)

您可以尝试在 header 中设置 Access-Control-Allow-Origin,如下所示。

headers: { 'Access-Control-Allow-Origin': '*' }
    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setCharacterEncoding("UTF-8");
    response.setHeader("Access-Control-Allow-Methods", "POST, GET");
    response.setHeader("Access-Control-Allow-Headers", "x-requested-with");

你对 CORS 一无所知。阅读规范:http://www.w3.org/TR/cors/

在您的情况下,您必须允许 null 来源,因为我们正在谈论本地主机。您必须允许您发送的方法和 header,甚至是 content-type header。您必须允许发送凭据,您可以在 Authorization header 中获取凭据。您必须使用 200 ok 处理 OPTIONS 请求。

Office 365 文件 API 和 SharePoint REST 刚刚引入了对 CORS 的支持。

https://msdn.microsoft.com/en-us/office/office365/howto/create-web-apps-using-CORS-to-access-files-in-Office-365

您尝试做的正是它的工作原理。该服务将使用 Access-Control-Allow-Origin header.

响应 OPTIONS pre-flight 请求

请求中的授权必须是 Azure Active Directory 颁发的 OAuth2 隐式授权访问令牌。