2011-12-06 1 views
0

Je commence à utiliser Facebook Graph API et je vais récupérer un jeton d'accès avec des requêtes HTTP simples via java.Comment détecter la redirection pour récupérer access_token via java

Après https://developers.facebook.com/docs/authentication/ je créé une nouvelle application, mais je ne dispose pas d'un domaine pour je fais une requête HTTP à

www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID &
redirect_uri = https: pour un flux côté serveur //www.facebook.com/connect/login_success.html

, et je suppose que pour obtenir rediriger vers une page de succès avec un code dans l'URL. Ensuite, je voudrais utiliser ce code faire une autre demande HTTP à

graph.facebook.com/oauth/access_token? client_id = YOUR_APP_ID & redirect_uri = YOUR_URL & client_secret = YOUR_APP_SECRET Code & = THE_CODE_FROM_ABOVE

et enfin obtenir mon jeton d'accès.

J'utilisé à la fois java.net.HttpURLConnection et org.apache.http.HttpResponse, mais, dans les deux cas, l'exécution du premier appel que je reçois comme 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 de nom d'utilisateur et de mot de passe), j'obtiens la page de succès avec le code!

Dans le HTML le champ de soumettre le bouton Connexion est vide et je ne peux pas récupérer les URL de redirection ... Je viens de lire un autre lien dans la balise <meta> qui génèrent un auth_token (c'est-il? Il est très différent par rapport à un access_token normal ...).

Alors ce que je demande est:

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

  2. Si oui, comment fonctionne 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 avoir besoin d'un jeton d'accès inséré "à la main" comme argument , et j'ai aussi vu facebook-java-api mais ça semble vieux).


Aussi, si je suis connecté Facebook, l'exécution du premier appel HTTP via Java je reçois comme réponse le code HTML d'une page de connexion Facebook.

En utilisant HTML pour créer une page Web et puis je clique simplement sur le bouton de connexion (sans insérer le nom d'utilisateur et mot de passe) Je reçois 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 directement obtenir la page success.htm sans passages au milieu.

Donc je suppose 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 une servlet mais j'ai l'erreur sur le domaine: ServletURL n'est pas un domaine Facebook ou un "site URL" enregistré pour mon application (en fait, je n'ai pas défini d'URL de site pour mon app ... et c'est le problème de base).

Dans tous les cas ici http://developers.facebook.com/docs/authentication/ dans la section types App> applications de bureau, ils disent:

[...] Une fois l'utilisateur autorise votre application [je laissais tout], nous redirigent l'utilisateur Retour à la redirect_uri avec le jeton d'accès à le fragment URI: [...]

DETECT redirect puis lisez le jeton d'accès de l'URI quels que soient les mécanismes à l'aide fournis par votre cadre de choix. [...]

Donc je pense qu'il est encore possible de détecter cette redirection via Java. Comment?

+0

Merci à l'avance! –

Répondre

2

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 correctement. Voici comment nous le faisons.

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 que vous pouvez interroger facebook avec

+0

Ok! Merci beaucoup! J'ai résolu le problème en modifiant les paramètres de base de mon application et en définissant "http: // localhost: 8080" comme site Web. Maintenant, je peux récupérer le code et access_token en utilisant une servlet. Donc, je pense qu'il n'est pas possible d'obtenir access_token sans utiliser java.net.HttpURLConnection (ou org.apache.http.HttpResponse) et https://www.facebook.com/connect/login_success.html comme URL de redirection. –

+0

vous pouvez faire une critique/accepter si c'est la bonne réponse – jontro

Questions connexes