2016-04-28 5 views
2

Ich benutze oauth2 um einen Benutzer Login über Facebook zu behandeln. Der Fehler tritt auf, wenn ich den Authorization Server in der Golang API anrufe.Facebook Oauth CORS Fehler

Hier ist der Netzwerkfehler.

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.

Netzwerk info (Chrom)

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

Request-Header

: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

Javascript-Funktion, die Server-API-Aufrufe.

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

Golang Funktion, die oauth Autorisierungsserver (facebook) aufruft.

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) }

stelle ich die richtigen Header auf der Serverseite im Anschluss an diese Führung. Setting HTTP headers in Golang

Ich kann nicht finden, wo der Fehler herkommt. (Facebook API Developer Console, die Callback-Header im Server-Code, oder die Javascript-Initiierung des Aufrufs? Ich verbrachte eine Menge Zeit ändern die Server-Header, aber der Fehler weiterhin als ein CORS-Problem.

Der Ursprung in meiner Anfrage Header null ist, das ist etwas zu beachten?

bearbeiten hinzugefügt no-cors Modus Ergebnis.

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
Alle drei Anrufe waren erfolgreich, wurde aber noch nie auf die oauth Seite umgeleitet, wenn er gesagt. Der Antworttyp war "undurchsichtig" mit einem Status 0.

+0

Nicht sicher, dass es helfen wird, da ich keine Möglichkeit finden kann, den 'Anfrage-Modus' einzustellen, aber es könnte Ihnen helfen zu verstehen, was zu tun ist. Grundsätzlich sind Ihre Header nicht das Problem. Die Probleme sind in den Antwortheadern, die angeben müssen, dass Sie die Seite laden dürfen. Wenn es keinen "Access-Control-Allow-Origin" -Weiß gibt, der die Domäne auflistet, die eine Ressource anfordert, soll der Browser diese Antwort blockieren. Der Fehler behauptet, dass Sie für Ihre Anfrage einen "No-Cors" -Modus festlegen können, was getan werden muss. Wenn ich Zeit habe, lese ich die Quelle von Request.go und versuche, eine tatsächliche Implementierung bereitzustellen. – evanmcdonnal

+0

Eine andere Sache, es ist definitiv keine Option auf die Anfrage. Ich empfehle, den 'Client' und den' RoundTripper' auszuprobieren. Letzteres ist eine Schnittstelle, und Sie können die verwendete Schnittstelle durch Ihre eigene Implementierung ersetzen. Es ist wahrscheinlich, dass die Lösung dies erfordert. – evanmcdonnal

+0

In den Anforderungsheadern sollte der Ursprung "localhost: 7001" anstelle von null sein? Oder ist es das Problem, dass Facebook oauth-Link keine Domains auf die weiße Liste setzt, weil es keinen Header "Access-control-allow-origin" hat? – goda

Antwort

0

Ein Netzwerk-Trace mithilfe von wireshark oder tcpdump kann helfen, herauszufinden, was vor sich geht, oder den HTTP-Verkehr mit einem beliebigen Firefox-Plugin erfassen, um Live-Header zu erfassen.