ASP.NET MVC5 OWIN Facebook authentification soudain ne fonctionne pas

Mise à jour en 2017!

Le problème que j'ai eu lorsque j'ai posté la question d'origine n'a rien à voir avec les récents changements de Facebook fait quand ils l'ont forcé tout le monde à la version 2.3 de leur API. Pour une solution à ce problème spécifique, voir sammy34 la réponse ci-dessous. La Version 2.3 de l' /oauth/access_token point de terminaison maintenant retourne du JSON au lieu de la forme codée valeurs

Pour des raisons historiques, voici ma question initiale/numéro:

J'ai une MVC5 application Web qui est à l'aide de la prise en charge intégrée pour l'authentification via Facebook et Google. Lorsque nous avons construit cette application il y a quelques mois, nous avons suivi ce tutoriel: http://www.asp.net/mvc/tutorials/mvc-5/create-an-aspnet-mvc-5-app-with-facebook-and-google-oauth2-and-openid-sign-on et tout fonctionnait très bien.

Maintenant, tout d'un coup, le Facebook de l'authentification a juste cessé de travailler ensemble. Le Google authentification encore de grandes œuvres.

Description du problème: Nous cliquez sur le lien pour vous connecter à l'aide de Facebook, nous sommes redirigés vers Facebook où nous sommes invité à le faire si nous wan pas pour permettre à notre Facebook app accès à notre profil. Lorsque nous cliquons sur "OK" nous sommes redirigé vers notre site, mais au lieu d'être connecté en nous simplement se retrouver à l'écran de connexion.

Je suis passé par ce processus en mode debug et j'ai ce ActionResult dans mon compte au contrôleur par le tutoriel mentionné ci-dessus:

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

Lorsque vous exécutez le code et lors de son retour de Facebook, le loginInfo objet est toujours la valeur NULL, ce qui provoque l'utilisateur afin d'être redirigé vers la de login.

Afin de comprendre ce qui se passe réellement dans les coulisses, j'ai installé le Violoneux, et de surveiller le trafic HTTP. Ce que je disovered est qu'après avoir cliqué sur "OK" à la Facebook autorisation de dialogue, Facebook renvoie à notre application avec cette URL:

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

Cette URL n'est pas un fichier réel et probablement manipulés par certains contrôleur/gestionnaire intégré dans ce OWIN cadre que je suis dans le doute. Le plus probable, c'est la connexion de retour à Facebook en utilisant le code de requête d'informations sur l'utilisateur qui est en train de se connecter. Maintenant, le problème est qu'au lieu de le faire, on est redirigé vers:

/Account/ExternalLoginCallback?error=access_denied

Dont je suis sûr, c'est quelque chose que Facebook est en train de faire, c'est, au lieu de nous donner les données de l'utilisateur, c'est de rediriger nous de retour avec ce message d'erreur.

Cela provoque la AuthenticationManager.GetExternalLoginInfoAsync(); à l'échec et à toujours retourner la valeur NULL.

Je suis complètement à court d'idées. Aussi loin que nous le savons, nous n'avons pas changer quoi que ce soit sur notre fin.

J'ai essayé de créer un nouveau Facebook application, j'ai essayé de suivre le tutoriel de nouveau, mais j'ai toujours le même problème.

Toutes les idées sont les bienvenues!

Mise à jour!

OK, ce qui me conduit fou! J'ai maintenant manuellement allé à travers les étapes nécessaires pour effectuer l'authentification et tout fonctionne très bien quand je fais ça. Pourquoi sur la terre, n'est-ce pas de travail lors de l'utilisation de la MVC5 Owin trucs?

C'est ce que j'ai fait:

    //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>

Pas d'erreurs, tout fonctionne très bien! Alors pourquoi diable est-ce pas de travail lors de l'utilisation de la MVC5 Owin des trucs? Il y a évidemment quelque chose de mal avec l'OWin mise en œuvre.

Je travaille de la même question - a commencé hier. J'ai un MVC5 application en utilisant le processus décrit ici: stackoverflow.com/questions/18942196/... et ici: stackoverflow.com/questions/20928939/.... Fonctionne très bien sur mon local environnement de dev, sur la plateforme azure suis en alternance erreurs de access_denied et FB erreur "compte tenu de l'URL n'est pas autorisée par la configuration de l'Application.: Un ou plus de l'Url n'est pas autorisé par les paramètres de l'Application..."
Bon je ne suis pas le seul 🙂 je vais être sûr de vous laisser savoir si je trouve une solution à ce problème!
J'ai eu le même problème, en mettant example.com/signin-facebook comme url de redirection sur facebook a résolu le problème
À la suite de votre URL de l'approche des tests, j'ai remarqué que mon application secret a changé! Des acclamations.

OriginalL'auteur HaukurHaf | 2014-03-12