Question

Je commence à utiliser l'API Facebook Graph et je vais récupérer un jeton d'accès avec quelques requêtes HTTP simples via java.

Après https://developers.facebook.com/docs/authentication/ J'ai créé une nouvelle application mais je n'ai pas de domaine donc Je fais une requête HTTP à

www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&
redirect_uri= https://www.facebook.com/connect/login_success.html

pour un flux côté serveur, et je suppose pour être redirigé vers une page de réussite avec un code dans l'URL. Ensuite, j'utiliserais ce code pour faire une autre requête HTTP à

graph.facebook.com/oauth/access_token? client_id= VOTRE_APP_ID & redirect_uri= VOTRE_URL & client_secret= VOTRE_APP_SECRET & code= THE_CODE_FROM_ABOVE

et enfin obtenir mon jeton d'accès.

J'ai utilisé à la fois java.net.HttpURLConnection et org.apache.http.HttpResponse, mais, dans les deux cas, en exécutant le premier appel, je reçois en réponse le code HTML d'une page de connexion Facebook.

Si j'utilise ce code HTML pour créer une page Web et que je clique simplement sur le bouton Connexion (sans insérer le nom d'utilisateur et le mot de passe), j'obtiens la page de réussite avec le code!

Dans le HTML le champ soumettre du bouton Login est vide et je ne peux pas récupérer les URL de redirection ... Je peux juste lire un lien alternatif dans la balise <meta> qui génère un auth_token (qu'est-ce que c'est? C'est très différent wrt un access_token normal ...).

Donc, ce que je demande est:

  1. il est possible de détecter la redirection cachée d'une certaine manière simplement en utilisant java.net.HttpURLConnection ou org.apache.http.HttpResponse?

  2. si oui, comment est le mécanisme? Est-ce lié au auth_token?

  3. Si non, est-ce possible avec d'autres bibliothèques? (J'ai aussi utilisé restfb, mais ils semblent nécessiter un jeton d'accès inséré «à la main» en tant que arg, et j'ai aussi vu facebook-java-api mais cela semble vieux).


De plus, si je suis connecté à Facebook, en exécutant le premier appel HTTP via Java, j'obtiens en réponse le HTML d'une page de connexion Facebook.

En utilisant HTML pour créer une page Web, puis je clique simplement sur le bouton de connexion (sans insérer le nom d'utilisateur et le mot de passe), j'obtiens la page success.htm avec le paramètre de code dans l'URL.

Si j'utilise l'URL d'origine directement dans mon navigateur, je peux obtenir directement la page success.htm sans passages au milieu.

Je suppose donc que le problème est dans la gestion des cookies: en Java (exécuté dans Eclipse) je ne peux pas accéder aux cookies de mon navigateur.

J'ai essayé de rediriger pour utiliser un servlet mais j'obtiens l'erreur concernant le domaine: ServletURL n'est pas un domaine Facebook ou une "URL de site" enregistrée pour mon application (en fait, je n'ai pas défini d'URL de site pour mon application ... et c'est le cœur du problème).

En tout cas ici http://developers.facebook.com/docs/authentication/ dans la section Types d'applications> Applications de bureau, ils disent:

[...] Une fois que l'utilisateur a autorisé votre application [j'ai tout autorisé], nous rediriger l'utilisateur vers le redirect_uri avec le jeton d'accès dans le fragment URI: [...]

Détectez cette redirection, puis lisez le jeton d'accès hors de l'URI en utilisant tous les mécanismes fournis par votre cadre de choix. [...]

Je pense donc qu'il est toujours possible de détecter cette redirection via Java. Comment?

Était-ce utile?

La solution

Si vous n'avez pas encore de domaine, je vous recommande d'utiliser localhost comme domaine.De cette façon, vous pouvez le tester sur votre serveur Web local / application locale.

L'utilisation de HttpURLConnection fonctionne très bien. Voici comment nous procédons.

Redirect to: 
"https://graph.facebook.com/oauth/authorize?" +
            "client_id=" + clientId + "&" +
            "redirect_uri=" + URLEncoder.encode(returnUrl, "utf-8") 
// After redirect to the return url do the following:

//Make a http request to 
"https://graph.facebook.com/oauth/access_token?client_id=" +
            "client_id=" + clientId + "&" +
            "redirect_uri=" + URLEncoder.encode(returnUrl, "utf-8")  + "&"+
            "client_secret=" + clientSecret + "&"+
            "code=" + request.getParameter("code");

Cela renverra un jeton d'accès avec lequel vous pouvez interroger Facebook

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top