Archiv der Kategorie ‘Facebook-Entwicklung‘

 
 

Neue Facebook-App


Meine zweite Facebook-Anwendung ist seit kurzem Online.
Die Anwendung blog365 – fotos by Stefan Grundmann zeigt Bilder aus einem Fotoblog.
Der Blog wird von einem guten Freund betrieben. Er hat sich vorgenommen ein Jahr lang jeden Tag ein Bild zu bloggen. Er ist nun seit über einem dreiviertel Jahr dabei und die Bilder sind wirklich sehenswert; von stilvollen Naturkompositionen, auf schwarz-weiß reduzierte Blumenstilleben oder schnellen und charakteristischen Streetfotografien ist vieles dabei.
Die Anwendung greift auf die Bilder zu, extrahiert sie und man kann sie innerhalb von Facebook ansehen.

Gut, eigentlich hat die Anwendung so keinen Sinn, Bilder können bei Facebook auch sehr einfach über die Pinnwand veröffentlicht werden. Sie ist aber eine weitere beispielhafte Anwendung und den Quellcode werde ich hier demnächst noch hier mit Erklärungen veröffentlichen.

Facebook Authentication & Authorization mit Java

Meine erste Facebook-App läuft jetzt seit gut einer Woche und hat bereits über 30 “Gefällt mir”. In diesem Artikel möchte ich darüber schreiben, wie ich die Authentifizierung von Benutzern bei Facebook gelöst habe.

In einem Artikel vor gut einem Jahr habe ich noch die facebook-java-api genutzt. Die Weiterentwicklung ist etwas eingeschlafen, deshalb war ich auf der Suche nach einer anderen API. Fündig geworden bin ich bei der RestFB, ein Open Source Framework, welches direkt auf die GraphAPI von Facebook zugreift.

Der erste Schritt bei der Entwicklung einer Anwendung auf Facebook ist die Anwendung selbst anzulegen. Man erhält dann eine Anwendungsnummer und zwei Schlüssel für die Authentifizierung, den API-Schlüssel und den Anwendungs-Geheimcode. Wichtig ist noch die Canvas-URL unter Facebook-Einbindung in den Einstellungen der Anwendung festzulegen, sowie die URL der Anwendung, die Canvasseite.

Den gesamten Prozess der Authentifizierung hat Facebook ganz gut beschrieben.

Bei dem ersten Aufruf greift meine Anwendung (in Struts entwickelt) als erstes auf die Canvas-URL zu.

Folgendes passiert dann. Man holt sich den Parameter “signed_request” und verarbeitet ihn. Bei dem ersten Aufruf muss der Nutzer sich noch authentifizieren und der Anwendung die Berechtigung erteilen, auf die eigenen Profildaten zugreifen zu können.
Es wird dann erstmal aufgerufen:

if (ret.getOauth_token() == null){
    return new ActionForward(authUrl, true);
}

Es erfolgt einer Weiterleitung auf die Authentifizierungs-URL von Facebook.
Die authUrl sieht so aus:

"https://graph.facebook.com/oauth/authorize" +
"?client_id=123456789" +
"&redirect_uri=http://localhost:8080/mudflat/apps/facebookauth.do?do=authSucess" +
"&scope=user_birthday";

wobei die client_id die Anwendungsnummer der Anwendung ist und unter scope die Berechtigungen stehen, die der Anwendung erteilt werden sollen. Welche Berechtigungen möglich sind, steht hier: Permissions Reference.
Der Benutzer kann die Anwendung nun hinzufügen und wird dann zur redirect_uri weitergeleitet.
Die Weiterleitungsadresse macht bei mir nichts anderes, als auf die eingebettete Anwendung bei Facebook weiterzuleiten (Canvasseite)

public ActionForward authSucess(
		ActionMapping mapping,
		ActionForm form,
		HttpServletRequest request,
		HttpServletResponse response) {		

return new ActionForward("http://apps.facebook.com/smd_auth_example", true);
}

Nun wird der Benutzer wieder zur Canvas-URL weitergeleitet.
Da diesmal gilt
authToken != null
kann dieser verarbeitet und der Benutzer authentifiziert werden.

Facebook schickt den Authentifizierungs-Token verschlüsselt im signed_request-Parameter mit.
Wie dieser verarbeitet wird, habe ich mir hier abgekupfert: Parsing signed_request in Java
Die Methode checkSignature(rawpayload, sig) überprüft dann, ob der Anwendungs-Geheimcode stimmt und stellt damit sicher, dass die Anwendung wirklich von Facebook aufgerufen wurde.

String sigreq = request.getParameter("signed_request");

int idx = sigreq.indexOf(".");
byte[] sig = new Base64(true).decode(sigreq.substring(0, idx).getBytes());
String rawpayload = sigreq.substring(idx+1);
String payload = new String(new Base64(true).decode(rawpayload));

/* parse the JSON payload and do the signature check */
FacebookRequest ret = new Gson().fromJson(payload, FacebookRequest.class);
/* check if it is HMAC-SHA256 */
if (!ret.getAlgorithm().equals("HMAC-SHA256")) {
    System.out.println("Fehler Algorthimus");
}
/* then check the signature */
checkSignature(rawpayload, sig);

if (ret.getOauth_token() == null){
    return new ActionForward(authUrl, true);
}

Ab diesem Punkt ist die Authentifizierung abgeschlossen und man kann mit der RestFB-API auf die Graph-API zugreifen:

FacebookClient facebookClient = new DefaultFacebookClient(ret.getOauth_token());
String query = "SELECT name FROM user WHERE uid=220439";
List users = facebookClient.executeQuery(query, User.class);
for (int i=0;i<users.size();i++){
    User u = users.get(i);
    System.out.println(u.getName());
}

Nun noch mal eine kurze Zusammenfassung:

  • Anwendung bei Facebook erstellen und die Canvas URL und die Canvasseite festlegen
  • Beim ersten Aufruf Weiterleitung auf die authURL und Parameter festlegen
  • Durchführung der Authentifizierung mit Entschlüsselung des signed_request Parameters und Bestätigung des Anwendungs-Geheimcodes.

Hilfreich bei der Entwicklung ist noch, wenn man sich etwas in die Dokumentationen von Facebook einliest

Und hier der komplette Quellcode

Ansonsten, bei Fragen einfach melden :-)

Erste Facebook Anwendung Online


Seit einigen Tagen läuft meine erste Anwendung auf Facebook. “Geburtstage” zeigt in einer kompakten Übersicht die Geburtstage aus der Freundesliste.
In einigen Tagen veröffentliche ich dann auch Teile des Quellcodes, dazu einige Erläuterungen, wie man eine Anwendung einbindet und wie man Benutzer authentifiziert.

Facebook Freunde mit der facebook-java-api

facebook_connectEinen Einstieg in Facebookconnect mit der Java Library facebook-java-api hatte ich bereits gegeben.
In diesem Artikel ein kleines Beispiel, wie man nach dem Connect Zugriff auf die Freundesliste bekommt.

Den ganzen Beitrag lesen…

Authentication mit Facebook Connect

facebook_connectFacebook Connect ist eine Möglichkeit, Benutzer über ihren Facebook Account auf einer eigenen Webseite zu authentifizieren.
Welche Idee dahinter steckt, was Single-Sign-on ist und was für Möglichkeiten es bietet, kann man sich unter den Links am Ende des Artikels genauer anschauen.


Den ganzen Beitrag lesen…