ASP.NET MVC5 OWIN Facebook-Authentifizierung, plötzlich nicht arbeiten

Update 2017!

Das Problem, das ich hatte, als ich die ursprüngliche Frage veröffentlicht hat, hat nichts zu tun mit den letzten änderungen, die Facebook vorgenommen, wenn Sie jeder gezwungen auf die version 2.3 Ihrer API. Für eine Lösung dieses spezifischen Problems, siehe sammy34 Antwort unten. Version 2.3 der /oauth/access_token Endpunkt gibt jetzt JSON statt form-codierten Werte

Aus historischen Gründen, hier ist meine ursprüngliche Frage/Problem:

Habe ich eine MVC5 Web-Anwendung, die mithilfe der integrierten Unterstützung für die Authentifizierung über Facebook und Google. Wenn wir Bauten diese app vor ein paar Monaten, wir folgten diesem tutorial: http://www.asp.net/mvc/tutorials/mvc-5/create-an-aspnet-mvc-5-app-with-facebook-and-google-oauth2-and-openid-sign-on und es hat alles Super geklappt.

Nun, ganz plötzlich, die Facebook-Authentifizierung hat einfach aufgehört zu arbeiten insgesamt. Die Google Authentifizierung funktioniert immer noch großartig.

Beschreibung des Problems: Wir klicken Sie auf den link Verbindung mit Facebook, wir werden umgeleitet und Facebook, wo wir aufgefordert werden, wenn wir wan nicht zulassen, dass unsere Facebook-app Zugriff auf unser Profil. Wenn wir auf "OK", wir werden umgeleitet auf unsere Seite zurück, aber anstatt dass Sie angemeldet sind wir einfach am Ende auf den login-Bildschirm.

Ich gegangen durch diesen Prozess im debug-Modus und ich habe diese ActionResult, die in meinem Konto controller als pro das tutorial, das oben erwähnt ist:

//GET: /Account/ExternalLoginCallback
[AllowAnonymous]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
    var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
    if (loginInfo == null)
    {
        return RedirectToAction("Login");
    }
    ............

Wenn man durch den code, und nach der Rückkehr von Facebook, die loginInfo-Objekt immer NULL, was bewirkt, dass der Benutzer umgeleitet werden, um zurück zur login -.

Um zu verstehen, was tatsächlich hinter den kulissen geschieht, ich habe Fiddler installiert und überwacht den HTTP-Verkehr. Was ich disovered ist, dass nach einem Klick auf "OK" auf der Facebook-permission-dialog, Facebook Umleitungen zurück zu unserer Anwendung mit der URL:

https://localhost/signin-facebook?code=<access-token>

Diese URL ist nicht eine tatsächliche Datei und wahrscheinlich behandelt, indem einige controller/handler, die in diesem OWIN Rahmen, den ich vermute. Die meisten wahrscheinlich, es ist eine Verbindung zurück zu Facebook mit dem angegebenen code zur Abfrage von Informationen über den Benutzer, die versuchen, sich einzuloggen. Nun, das problem ist, dass anstatt das zu tun, wir werden umgeleitet:

/Account/ExternalLoginCallback?error=access_denied

Denen ich sicher bin, dass ist etwas, was Facebook tut, ist, dass, anstatt uns die Daten des Nutzers, es wird umleiten wir uns wieder mit dieser Fehlermeldung.

Dies bewirkt, dass die AuthenticationManager.GetExternalLoginInfoAsync(); zu scheitern und immer wieder NULL.

Ich bin völlig ratlos. Soweit wir wissen, Taten wir nichts ändern an unserem Ende.

Ich habe versucht, erstellen Sie eine neue Facebook app, die ich ausprobiert habe, nach dem tutorial wieder, aber ich habe immer das gleiche problem.

Irgendwelche Ideen willkommen!

Update!

OK, das treibt mich in den Wahnsinn! Ich habe jetzt manuell gegangen durch die erforderlichen Schritte zum durchführen der Authentifizierung und funktioniert alles Super wenn ich das tun. Warum auf der Erde ist diese nicht funktioniert, wenn mit dem MVC5 Owin Zeug?

Dies ist, was ich getan habe:

    //Step 1 - Pasted this into a browser, this returns a code
    https://www.facebook.com/dialog/oauth?response_type=code&client_id=619359858118523&redirect_uri=https%3A%2F%2Flocalhost%2Fsignin-facebook&scope=&state=u9R1m4iRI6Td4yACEgO99ETQw9NAos06bZWilJxJrXRn1rh4KEQhfuEVAq52UPnUif-lEHgayyWrsrdlW6t3ghLD8iFGX5S2iUBHotyTqCCQ9lx2Nl091pHPIw1N0JV23sc4wYfOs2YU5smyw9MGhcEuinvTAEql2QhBowR62FfU6PY4lA6m8pD3odI5MwBYOMor3eMLu2qnpEk0GekbtTVWgQnKnH6t1UcC6KcNXYY

I was redirected back to localhost (which I had shut down at this point to avoid being redirected immediately away).  The URL I was redirected to is this:

https://localhost/signin-facebook?code=<code-received-removed-for-obvious-reasons>

Now, I grabbed the code I got and used it in the URL below:

//Step 2 - opened this URL in a browser, and successfully retrieved an access token
https://graph.facebook.com/oauth/access_token?client_id=619359858118523&redirect_uri=https://localhost/signin-facebook&client_secret=<client-secret>&code=<code-from-step-1>

//Step 3 - Now I'm able to query the facebook graph using the access token from step 2!

https://graph.facebook.com/me?access_token=<access-token-from-step-2>

Keine Fehler, alles funktioniert Super! Dann warum zum Teufel wird dieser nicht funktioniert, wenn mit dem MVC5 Owin Zeug? Es ist offensichtlich etwas falsch mit der OWin-Implementierung.

Ich arbeite das gleiche Problem - mal passiert gestern. Ich habe eine MVC5-app mit den hier beschriebenen Prozess: stackoverflow.com/questions/18942196/... und hier: stackoverflow.com/questions/20928939/.... Funktioniert einwandfrei auf meinem lokalen dev-Umgebung auf azure-Plattform bin immer abwechselnd Fehler von access_denied und FB-Fehler "die Angegebene URL ist nicht erlaubt, die App-Konfiguration.: Eine oder mehrere von den angegebenen URLs ist nicht gestattet, die Einstellungen der App..."
Gut, ich bin nicht der einzige 🙂 ich werde sicher sein, Sie wissen zu lassen, wenn ich eine Lösung für dieses problem!
Ich hatte das gleiche problem, putting example.com/signin-facebook als redirect-url auf facebook löste das Problem
Nach Ihrer URL-testing-Ansatz, bemerkte ich, dass meine app secret hatte sich verändert! Cheers.

InformationsquelleAutor HaukurHaf | 2014-03-12

Schreibe einen Kommentar