2016-04-28 149 views
2

我正在使用oauth2處理用戶通過Facebook登錄。我在golang api中調用授權服務器時發生錯誤。Facebook Oauth CORS錯誤

這是網絡錯誤。

Fetch API cannot load https://www.facebook.com/dialog/oauth?client_id=1543358959292867&redirect_u…=email+public_profile&state=mUi4IpdY8yF5TNVVptMNNSn8IbVSZxJXTSEFM8Zg8LM%3D. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

網絡信息(鉻)

Request URL:https://www.facebook.com/dialog/oauth?client_id=1543358959292867&redirect_uri=http%3A%2F%2Flocalhost%3A7001%2FFBLogin%2FCallback&response_type=code&scope=email+public_profile&state=lkmenB4FjNOShUQzL0Gpymi1xsvauaL7TawmUjCyvI4%3D Request Method:GET Status Code:302 Remote Address:[2a03:2880:f003:c1f:face:b00c:0:25de]:443

請求頭

:authority:www.facebook.com :method:GET :path:/dialog/oauth?client_id=1543358959292867&redirect_uri=http%3A%2F%2Flocalhost%3A7001%2FFBLogin%2FCallback&response_type=code&scope=email+public_profile&state=KPbwnGWQoI7PHvwhJ_JvZ7RowPthjqpaDTgKVI5NHrM%3D :scheme:https accept:*/* accept-encoding:gzip, deflate, sdch accept-language:en-US,en;q=0.8 origin:null referer:http://localhost:3000/ user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36

調用服務器API

JavaScript函數。

let loginUrl = "http://localhost:7001/FBLogin" //server url let config = { method: 'GET', mode: 'cors', } fetch(loginUrl, config).then(response => { ... }

Golang函數調用OAuth授權服務器(臉譜)。

func FBLogin(w http.ResponseWriter, r *http.Request) { state, err := hashutil.GenerateRandomState() logutil.Fatal(err) url := config["fb"].AuthCodeURL(state) logutil.OauthSessionLogger(state) http.Redirect(w, r, url, 302) }

我把這個指南在服務器端適當的標題。 Setting HTTP headers in Golang

我似乎無法找到錯誤來自哪裏。 (facebook API開發者控制檯,服務器代碼中的回調頭文件,還是啓動調用的javascript?我花了很多時間更改服務器頭文件,但錯誤仍然存​​在作爲CORS問題

我的請求頭是空,是值得考慮的?

編輯沒有添加-CORS模式的結果。

FBLogin 302 text/html SessionActions.js?524b:35 736 B 5 ms
oauth?client_id=154335&redirect_uri=http%3A%2F%2Flocalhost%3A7001%2FFBLogin%2FCallback&D 302 text/html
http://localhost:7001/FBLogin 611 B 57 ms
login.php?skip_api_login=1&api_key=154335 200
所有三個電話是成功的,但從來沒有重定向到,即使這麼說的OAuth頁面。響應類型爲「不透明」,狀態爲0.

+0

不確定這會有幫助,因爲我找不到任何方法來設置'請求模式',但它可能會幫助您瞭解需要完成的操作。基本上,你的頭不是問題。這些問題出現在響應頭文件中,這些頭文件需要指明您可以加載頁面。如果沒有「Access-Control-Allow-Origin」白名單列出請求資源的域,瀏覽器應該阻止該響應。錯誤聲稱你可以爲你的請求設置一個「no-cors」模式,這就是需要做的。時間允許,我會閱讀Request.go的源代碼並嘗試提供實際的實現。 – evanmcdonnal

+0

另一件事,它絕對不是請求上的選項。我建議查看'Client'和'RoundTripper'。後者是一個接口,你可以用自己的實現來替換正在使用的接口,這可能是解決方案需要你這樣做的。 – evanmcdonnal

+0

在請求頭文件中,起源應該是'localhost:7001',而不是null?或者是facebook oauth鏈接沒有白名單的問題,因爲它沒有'Access-control-allow-origin'頭部? – goda

回答

0

使用wireshark或tcpdump的網絡跟蹤可以幫助找到正在發生的事情或使用任何Firefox插件捕獲HTTP流量來捕獲實時頭文件。