【问题标题】:CORS issue with KeyrockKeyrock 的 CORS 问题
【发布时间】:2017-04-22 11:23:52
【问题描述】:

我正在尝试将自定义应用程序与 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;
      }
});

但是因为我收到了,所以发布请求永远不会开始:

XMLHttpRequest 无法加载 http://{ip}:{port}/oauth2/token。预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Methods。

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

谁能帮帮我?

【问题讨论】:

    标签: javascript fiware django-cors-headers


    【解决方案1】:

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

    • 访问控制允许标头
    • 访问控制允许方法
    • 访问控制允许来源
    • 访问控制公开标头

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

    从请求中删除这些。

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

    【讨论】:

    • 你是对的。删除这些字段一切正常。谢谢。
    猜你喜欢
    • 2021-10-27
    • 1970-01-01
    • 2018-04-04
    • 2015-06-29
    • 2021-11-16
    • 2017-04-13
    • 2019-10-14
    • 2019-12-01
    相关资源
    最近更新 更多