2017-05-10 94 views
1

在AWS上,我構建了一個使用API​​網關在Web上公開的Lambda函數。使用CORS從遠程web客戶端調用AWS API網關

對Amazon API的訪問受到Amazon Cognito的保護。

我的問題是我無法從test.mydomain.com託管客戶端發送請求到這個API,即使是在我上Cognito成功驗證(因此在發送請求頭中所需的令牌)。

我在我的網絡客戶端上使用的代碼將請求發送到API網關端點:

function ajaxPost(url, data, callback) { 

var req = new XMLHttpRequest(); 
req.open("POST", url); 

req.addEventListener("load", function() { 
    if (req.status >= 200 && req.status < 400) { 
     callback(req.responseText); 
    } else { 
     console.error(req.status + " " + req.statusText + " " + url); 
    } 
}); 

req.addEventListener("error", function() { 
    console.error("URL " + url + " unreachable."); 
}); 

req.setRequestHeader("Content-Type", "application/json"); 
req.setRequestHeader("Authorization", data.get("id-token")); 

data = JSON.stringify(data); 

req.send(data); 
} 

我啓用了通過AWS控制檯API方法CORS,也是對我的瀏覽器進行測試,這樣交叉域名請求應該被允許。

編輯

添加訪問控制展露報頭中的API網關CORS配置後, 錯誤消息我從Chrome控制檯得到的是:「的XMLHttpRequest無法加載https://XXXX.execute-api.us-east-1.amazonaws.com/prod/RessourceName的預檢反響。無效HTTP狀態代碼401「,我可以在OPTIONS響應標題中看到」x-amzn-errortype:UnauthorizedException「

現在已經過去幾天了,在查看每個API網關教程和配置後,我仍然陷入困境......任何幫助將不勝感激,非常感謝!

+0

'OPTIONS'請求是否從curl工作?例如'curl -v -X選項https:// ...' –

+0

我得到了與Curl相同的「401/Unauthorized」響應...謝謝! – edouardtheron

回答

0

解決!

顯然,在AWS中會出現一個錯誤,其中啓用/編輯之後的CORS API已經被部署,什麼都不會做。

看到這麼迴應的位置:https://stackoverflow.com/a/40733680/7717871

我試圖創建從AWS控制檯一個新的API,在過程的一開始就使CORS,然後部署新創建的API:它的工作。