2016-12-07 85 views
1

我正在嘗試將自定義應用程序與Keyrock Fiware Identity Manager集成。 流動如下:CORS問題與Keyrock

  • 上登錄按鈕用戶點擊
  • 他被重定向到

/的oauth2 /授權/ RESPONSE_TYPE =代碼& CLIENT_ID = {的clientid}? &狀態= XYZ & REDIRECT_URI = HTTP:{IP}:{端口}

  • 用戶將其憑據
  • 他被重定向到我的應用程序的認證後,我試着檢索令牌如下:

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無法加載ht TP:// {IP}:{端口} /的oauth2 /令牌。請求標頭字段預檢響應中的Access-Control-Allow-Headers不允許Access-Control-Allow-Methods。

我試着將{ip}:{port}插入到Keyrock的local_settings.py文件中的CORS_WHITELIST和ALLOWED_HOST,但沒有任何更改。

任何人都可以幫到我嗎?

回答

1

諷刺的是,我認爲這個問題是由事實,你正在使用的CORS頭意味着在你的請求響應造成的:

  • 訪問控制允許報頭
  • 接入控制 - 允許-方法
  • 訪問控制允許來源
  • 訪問控制 - 暴露 - 接頭

因此預檢失敗b因爲服務器不允許使用這些標籤,只有響應標題Access-Control-Allow-Headers中提供的標題的子集。

從請求中刪除這些。

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

+0

你說得對。 刪除這些字段一切都很好。謝謝。 – sirnino