Keyrock 的 CORS 问题

CORS issue with Keyrock

我正在尝试将自定义应用程序与 Keyrock Fiware Identity Manager 集成。 流程如下:

/oauth2/authorize/?response_type=code&client_id={clientid}&state=xyz&redirect_uri=http:{ip}:{port}

var reqData = "grant_type=authorization_code&code=" + code + "&redirect_uri=" + http:{ip}:{port};

var reqHeaders = new Object();
  reqHeaders.Access-Control-Allow-Headers= "Content-Type, Access-Control-Allow-Headers,Access-Control-Allow-Origin, Authorization, X-Requested-With, origin, accept",
  reqHeaders.Access-Control-Allow-Methods= "POST, GET, OPTIONS, DELETE, PUT",
  reqHeaders.Access-Control-Allow-Origin="*"
  reqHeaders.Access-Control-Expose-Headers="http://*/*"
  reqHeaders.Authorization="Basic {token}"
  reqHeaders.Content-Type="application/x-www-form-urlencoded"
  reqHeaders.X-Requested-With="XMLHttpRequest"

$.ajax({
      url : idmURL + '/oauth2/token',
      type : 'POST', 
      dataType : 'json',
      crossDomain : true,
      data : reqData,
      headers : reqHeaders,
      success : function(data) {
          console.log(data);
          token = data.access_token;
      }
});

但是 post 请求从未启动,因为我收到:

XMLHttpRequest cannot load http://{ip}:{port}/oauth2/token. Request header field Access-Control-Allow-Methods is not allowed by Access-Control-Allow-Headers in preflight response.

我尝试将 {ip}:{port} 插入到 Keyrock local_settings.py 文件中的 CORS_WHITELIST 和 ALLOWED_HOST,但没有任何变化。

谁能帮帮我?

具有讽刺意味的是,我认为问题是由于您使用的 CORS headers 用于响应您的请求:

  • Access-Control-Allow-Headers
  • Access-Control-Allow-Methods
  • Access-Control-Allow-Origin
  • Access-Control-Expose-Headers

因此预检失败,因为服务器不允许这些,只有响应中提供的 header 的子集 header Access-Control-Allow-Headers.

从请求中删除这些。

更多信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS