【问题标题】:Cross origin POST request not working for Outlook API跨源 POST 请求不适用于 Outlook API
【发布时间】:2017-12-18 03:36:56
【问题描述】:

我正在使用this part of the Outlook API。它说您应该能够进行发布请求,但是当我尝试时出现以下错误:

Failed to load https://login.microsoftonline.com/common/oauth2/v2.0/token: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3003' is therefore not allowed access. The response had HTTP status code 400.

我该如何解决这个问题?我显然无权访问 Outlook 的服务器,但考虑到 这就是文档中所说的内容,他们肯定会让我发帖请求!

如果有帮助,这是我的代码:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
  let url = new URL(window.location);
  let code = url.searchParams.get('code');
  let redirect = 'http%3A%2F%2Flocalhost%3A3003%2Fauth-process-token.html';
  let clientId = '<MY ID>';
  let clientSecret = '<MY KEY>';

  var req_string = 'grant_type=authorization_code&code=' + code + '&redirect_uri=' + redirect + '&client_id=' + clientId + '&client_secret=' + clientSecret;

  $.ajax({
    type: 'POST',
    url: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
    crossDomain: true,
    data: req_string,
    dataType: 'application/x-www-form-urlencoded',
    success: function (responseData, textStatus, jqXHR) {
      var value = responseData.someKey;
    },
    error: function (responseData, textStatus, errorThrown) {
      console.log('POST failed.', errorThrown);
    }
  });
</script>

编辑:我修复了“错误请求”错误,但它仍然给了我另一个错误。

【问题讨论】:

  • 一种解决方法是在您的 chrome 浏览器中使用 CORS 过滤器。只是让事情正常进行的替代方案。 chrome.google.com/webstore/detail/cors-toggle/…
  • 问题是,您正在发出 错误请求 (400) - 也许 MS 不会向糟糕的 API 实施者发出 CORS 标头
  • 也许您没有正确执行前面的步骤
  • 这是 Oauth2 授权类型“授权码”。响应将仅发送回客户端配置中指定的回调 url 或重定向 url。您的 ajax 调用可能没有收到回复。
  • 尝试适用于 SPA 的 oauth2“隐式流”。文档是:docs.microsoft.com/en-us/azure/active-directory/develop/…

标签: javascript jquery ajax http-post outlook-api


【解决方案1】:

一种解决方法是使用 cors.io

http://cors.io/?http://your_link

原来如此

http://cors.io/?https://login.microsoftonline.com/common/oauth2/v2.0/token

【讨论】:

  • 谢谢,虽然我不认为通过 3rd-party 服务进行 OAuth 是一个非常安全的想法..
  • 如果前面的步骤有效,可能无论如何都不是 CORS 问题...code: the authorization code obtained in the prior step 显然有效
  • 我以为是 CORS 问题,我在使用本地服务器时遇到了同样的错误,我将其用作临时解决方法(后来我将客户端和服务器都移到了同一个端口。)
  • OP 能够获取授权码的事实表明这不是 CORS 问题 - 授权码是从与授权令牌相同的服务器检索的 - OP 收到错误请求的事实(尽管另有说明,但 http 状态 400 是错误请求)表明他正在制作...鼓滚动...错误请求
猜你喜欢
  • 2016-11-03
  • 2020-07-28
  • 2017-03-15
  • 1970-01-01
  • 1970-01-01
  • 2023-02-14
  • 1970-01-01
  • 2014-09-05
  • 1970-01-01
相关资源
最近更新 更多