Voici comment je le fais sur App Engine:
Étape 1) Inscrire une "app" sur Facebook (cf. https://developers.facebook.com/ ). Vous donnez Facebook un nom pour l'application et l'url. L'url que vous enregistrez est l'url de la page (jsp servlet ou) que vous souhaitez pour gérer la connexion. À partir de l'enregistrement, vous obtenez deux chaînes, une "app ID" et un "secret de l'app" (ce dernier étant votre mot de passe, ne pas le donner ou l'écrire en html).
Pour cet exemple, disons que l'url que j'ai enregistrer est "http://myappengineappid.appspot.com/signin_fb.do".
2) à Partir d'une page web, avec un bouton, vous rediriger l'utilisateur vers l'url suivante sur Facebook, en remplaçant votre app id "myfacebookappid" dans l'exemple ci-dessous. Vous devez également choisir les autorisations (ou "étendues") vous souhaitez le demander à l'utilisateur (cf. https://developers.facebook.com/docs/reference/api/permissions/ ). Dans l'exemple que j'ai demander l'accès à l'email de l'utilisateur uniquement.
(Une chose utile à savoir est que vous pouvez aussi passer le long d'une chaîne facultative qui sera retourné à l'identique dans le "champ d'application" de paramètre. Par exemple, je passe de l'utilisateur de la banque de données de la clé, donc je peux récupérer l'utilisateur, lors de Facebook passe la touche retour pour moi. Je ne fais pas cela dans l'exemple).
Voici une jsp extrait:
<%@page import="java.net.URLEncoder" %>
<%
String fbURL = "http://www.facebook.com/dialog/oauth?client_id=myfacebookappid&redirect_uri=" + URLEncoder.encode("http://myappengineappid.appspot.com/signin_fb.do") + "&scope=email";
%>
<a href="<%= fbURL %>"><img src="/img/facebook.png" border="0" /></a>
3) Votre utilisateur sera transmise à Facebook, et lui demande d'approuver les autorisations que vous demandez. Ensuite, l'utilisateur sera redirigé vers l'url que vous avez enregistré. Dans cet exemple, c'est "http://myappengineappid.appspot.com/signin_fb.do" qui, à mon web.xml les cartes pour la suite de la servlet:
import org.json.JSONObject;
import org.json.JSONException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SignInFB extends HttpServlet {
public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
String code = req.getParameter("code");
if (code == null || code.equals("")) {
// an error occurred, handle this
}
String token = null;
try {
String g = "https://graph.facebook.com/oauth/access_token?client_id=myfacebookappid&redirect_uri=" + URLEncoder.encode("http://myappengineappid.appspot.com/signin_fb.do", "UTF-8") + "&client_secret=myfacebookappsecret&code=" + code;
URL u = new URL(g);
URLConnection c = u.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(c.getInputStream()));
String inputLine;
StringBuffer b = new StringBuffer();
while ((inputLine = in.readLine()) != null)
b.append(inputLine + "\n");
in.close();
token = b.toString();
if (token.startsWith("{"))
throw new Exception("error on requesting token: " + token + " with code: " + code);
} catch (Exception e) {
// an error occurred, handle this
}
String graph = null;
try {
String g = "https://graph.facebook.com/me?" + token;
URL u = new URL(g);
URLConnection c = u.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(c.getInputStream()));
String inputLine;
StringBuffer b = new StringBuffer();
while ((inputLine = in.readLine()) != null)
b.append(inputLine + "\n");
in.close();
graph = b.toString();
} catch (Exception e) {
// an error occurred, handle this
}
String facebookId;
String firstName;
String middleNames;
String lastName;
String email;
Gender gender;
try {
JSONObject json = new JSONObject(graph);
facebookId = json.getString("id");
firstName = json.getString("first_name");
if (json.has("middle_name"))
middleNames = json.getString("middle_name");
else
middleNames = null;
if (middleNames != null && middleNames.equals(""))
middleNames = null;
lastName = json.getString("last_name");
email = json.getString("email");
if (json.has("gender")) {
String g = json.getString("gender");
if (g.equalsIgnoreCase("female"))
gender = Gender.FEMALE;
else if (g.equalsIgnoreCase("male"))
gender = Gender.MALE;
else
gender = Gender.UNKNOWN;
} else {
gender = Gender.UNKNOWN;
}
} catch (JSONException e) {
// an error occurred, handle this
}
...
J'ai enlevé code de gestion d'erreur, comme vous pouvez le gérer différemment de ce que je fais. (Aussi, le "Genre" est une catégorie que j'ai définie.) À ce stade, vous pouvez utiliser les données pour ce que vous voulez, comme l'enregistrement d'un nouvel utilisateur ou rechercher un utilisateur existant pour vous connecter. Notez que le "myfacebookappsecret" chaîne doit bien sûr être votre secret de l'app de Facebook.
Vous aurez besoin de la "org.json" package pour utiliser ce code, que vous pouvez trouver à: http://json.org/java/ (il suffit de prendre le .java fichiers et les ajouter à votre code dans un org/json structure de dossier).
J'espère que cette aide. Si quelque chose n'est pas clair, merci de faire un commentaire, et je mettrai à jour la réponse.
Ex animo, - Alexander.
*Mise à JOUR*
Je veux ajouter quelques bribes de renseignements, toutes mes excuses si certains de ce qui semble un peu excessif.
Pour être en mesure de se connecter à un utilisateur par son/son Facebook compte, vous avez besoin de savoir qui de l'utilisateur dans la banque de données que nous parlons. Si c'est un nouvel utilisateur, facile, créer un nouvel objet utilisateur (avec un champ appelé "facebookId", ou ce que vous voulez l'appeler, dont la valeur que vous obtenez à partir de Facebook), persister dans la banque de données et les journaux de l'utilisateur.
Si l'utilisateur existe pas, vous devez avoir le champ avec le facebookId. Lorsque l'utilisateur est redirigé à partir de Facebook, vous pouvez saisir le facebookId, et de regarder dans le magasin de données pour trouver l'utilisateur auquel vous souhaitez vous connecter.
Si vous avez déjà des utilisateurs, vous devez laisser le journal dans la façon dont vous le faites habituellement, si vous savez qui ils sont, puis les envoyer à Facebook, obtenir le facebookId de retour et de mise à jour de leur objet utilisateur. De cette façon, ils peuvent se connecter en utilisant Facebook la prochaine fois.
Une autre petite remarque: L'utilisateur sera présenté avec un écran sur Facebook demandant pour permettre à votre application d'accéder à tout ce étendues que vous demandez, il n'y a pas moyen de contourner cela (du moins étendues que vous demandez, le moins intrusif, il semble, tout de même). Cependant, cela se produit uniquement la première fois qu'un utilisateur est redirigé (sauf si vous demandez plus étendues plus loin, puis il va demander à nouveau).