Keyrock 的 CORS 问题

Posted

技术标签:

【中文标题】Keyrock 的 CORS 问题【英文标题】:CORS issue with Keyrock 【发布时间】: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 中,但没有任何变化。

谁能帮帮我?

【问题讨论】:

【参考方案1】:

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

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

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

从请求中删除这些。

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

【讨论】:

你是对的。删除这些字段一切正常。谢谢。

以上是关于Keyrock 的 CORS 问题的主要内容,如果未能解决你的问题,请参考以下文章

AuthZforce 在没有固件启用程序的情况下使用

Fiware IDM:动态权限资源

AuthZForce 安全级别 2:基本授权错误“未为应用程序创建 AZF 域”

AuthzForce 更新策略失败

如何根据实体类型授予权限?

启用 CORS 时出现 Spring/Angular CORS 问题 [重复]