Dieser Artikel wurde maschinell übersetzt.

Innovation

Grundlegende Facebook-Programmierung: Authentifizierung und Aktualisierungen

Dino Esposito

Dino EspositoFacebook ist eine reiche und komplexe Softwareplattform, die eine anspruchsvolle und vielseitige Entwicklungsframework zu Devel macht­Oper. Die Bedeutung von "Facebook Programmierung" möglicherweise zunächst nicht klar. Es gibt im Wesentlichen zwei Arten von Facebook-Anwendungen. Eine Art umfasst Anwendungen, die Leben und gedeihen in der Facebook-Umgebung. Diese apps sind im wesentlichen reiche Webseiten geladen in Facebook canvas-Seiten und in der Haupt-Website gehostet. Um die app zu verwenden, müssen Benutzer navigieren zu der Facebook-Website und auf ihr eigenes Konto einloggen. Diese apps können eigene Logik implementieren —­was auch immer man innerhalb einer Webseite mithilfe von JavaScript oder andere Web-Programmierung-Technologien von Ausdrücken kann – und auf Facebook Goodies wie Freunde, News-Feeds, Medien und mehr zugreifen können. Um diese Art der Programmierung zu beginnen, gehen Sie einfach auf der Seite "Apps auf Facebook.com" unter bit.ly/f5hERV.

Ein weiterer Ansatz für Facebook Programmierung besteht darin, einige Kernfunktionen von Facebook in vorhandene Anwendungen wie Websites, mobile Anwendungen (z. B. Android, iOS oder Windows Phone) oder desktop-Anwendungen zu integrieren.

Ich werde in diesem Artikel konzentrieren sich auf diesen Aspekt der Facebook Programmierung und erläutern, wie die Facebook C# API verwenden, um Benutzer zu authentifizieren und post programmgesteuert im Namen des aktuell angemeldeten Benutzers.

Einbettung den Like Button

Wenn es darum geht, beliebte soziale Netzwerke wie Facebook und Twitter, ist die erste Stufe der Integration mit externen Anwendungen durch den Einsatz von ad-hoc-Tasten, um "die Seite oder Tweet darüber wie". Es ist kaum eine Programmierung erforderlich; Es ist rein eine Frage der ad-hoc-Markup in die Webseiten einfügen.

So ist der einfachste Weg, um Ihre Website populärer machen den Facebook Like-Button in einen neuen Iframe einbetten, so dass jeder Benutzer, der gerade auf der Seite kann es sofort wie auf Facebook. Hier ist das minimale Markup, die, das Sie brauchen:

    <iframe src="http://www.facebook.com/plugins/like.php?href=XXX">
    </iframe>

Sie ersetzen Sie XXX mit der URL der Seite mögen. Darüber hinaus sollten Sie das Iframe-Element zu machen, besser Zusammenführen mit dem Rest der Seite ein bisschen CSS-Stil hinzu. In Abbildung 1 ist das Endergebnis dargestellt.

The Facebook Like Button
Abbildung 1 den Facebook Like-Button

Die Schaltfläche "Like" ist die einfachste (und beliebtesten) von Facebook social Plug-ins. Die meiste Zeit, können Sie in Ihre Web-Seiten über Frames oder ad-hoc-Markup Plugins integrieren. Einige Plugins benötigen die Facebook JavaScript SDK und einige nur funktionieren, wenn Sie benutzerdefinierte Facebook-Seiten haben. Skripting Facebook in einem zukünftigen Artikel erörtert.

Darüber hinaus mit sozialen Plug-ins, Integration von Facebook in apps (und nicht nur Websites) bedeutet, zwei Hauptaufgaben zu erfüllen: lassen Sie Benutzer authentifizieren sich mit Ihrer app mit ihrem Facebook-Konto, und aktivieren Sie die app, um die Facebook-Wände von bestimmten Benutzern gesendet werden. Beginnen wir mit der Benutzerauthentifizierung.

OAuth und der alte Traum von einem einzigen Authentifizierungsmodul

Benutzerauthentifizierung ist eine Kernfunktion von fast jedem bedeutenden Website. Vor einem Jahrzehnt war einer der meistverkauften Punkte von ASP.NET im Vergleich zu klassischen ASP die Verfügbarkeit eines hoch wiederverwendbare Mitgliedschaft-System, das die Entwicklung von einer Authentifizierungsebene in einem Bruchteil der normalerweise benötigten Zeit erleichtert.

In diesen Tagen, ist jedoch eine benutzerdefinierte Authentifizierungsebene eine verlockende Option. Durch die Implementierung einer ad-hoc-Authentifizierungsebene, machen Entwickler sich zum sicheren Speichern von Kennwörtern und die Kosten für die Verwaltung von Tausenden von Konten oder mehr verantwortlich. Für Benutzer also noch ein Benutzername/Kennwort-Paar zu erinnern.

Vor Jahren war die Microsoft Passport-Initiative eine intelligente aber wahrscheinlich zu früh Versuch, Benutzer Leben einfacher zu machen, wenn sie über ein paar Verwandte Seiten verschoben. Die Idee hinter dem Pass war, dass Benutzer brauchte nur eine einzige erfolgreiche Anmeldung frei durch alle zugehörigen Websites zu navigieren.

Mit älteren Versionen von ASP.NET gebündelt, die Passport-API ist jetzt offiziell gegangen. Das Problem, das es entwickelt wurde, um zu lösen, ist jedoch noch vorhanden.

Heute, OpenID (OpenID) ist eine gute Option für Websites, die ihre Benutzer zu authentifizieren, aber nicht müssen sie mit noch einem anderen Satz von Anmeldeinformationen aufladen möchten. OpenID ist ein einzelnes anmelden (SSO) Protokoll, das die Site verwendet ein dritter Dienstleister herstellen, die die Authentifizierung für Sie gelingt. Eine OpenID-fähige Website verwaltet nur Anfang und Ende der Authentifizierungsaufgabe. Es leitet den Benutzer an den konfigurierten OpenID-Provider und Identitätsinformationen zurück, wenn alles geschehen ist.

OpenID ist ein beliebtes Schlagwort wird sogar noch ein anderes diskutiert: OAuth (oauth.net). Worin besteht der Unterschied?

OpenID ist ausschließlich ein SSO-Protokoll. Ein OpenID-Provider verwaltet nur die Identität der registrierte Benutzer. Aber soziale Netzwerke wie Twitter und Facebook brauchen mehr. Ein app möchten einfach Benutzer Authentifizierung über Facebook zu lassen. Andere möchten vielleicht authentifizieren über Facebook aber auch post an Wand des Benutzers. Noch kann anderer app Timeline und den letzten Aktivität des Benutzers lesen wollen. Am Anfang von allem findet Authentifizierung (die über das OpenID-Protokoll verwaltet werden kann), aber derselbe Benutzer kann unterschiedliche Berechtigungen für unterschiedliche Anwendungen gewähren. Und das ist ein Aspekt, der nicht OpenID entworfen wurde zu behandeln.

OAuth ist das Protokoll, das Twitter und Facebook nutzen, Authentifizierung und Autorisierung zu behandeln. Ein OAuth-Anbieter zurück nicht einfach Identitätsinformationen. Es fragt den Benutzer, welche Berechtigungen er will die app erteilen und dann packt alles, Anmeldeinformationen und Berechtigungen in einem Zugriffstoken. Die Clientanwendung übergibt dann das Zugriffstoken zulässige Operation im Auftrag des Benutzers führen. OAuth (und OpenID, sowie) ein Vorteil ist, dass der Anbieter Benutzeranmeldeinformationen zur app nie offenbart. Wenn OAuth verwendet wird, kann der Benutzer außerdem Berechtigungen für jede app jederzeit widerrufen. Also, zum Beispiel vorstellen, dass Sie irgendwann mit app XYZ authentifizieren mithilfe von Twitter (oder Facebook) und erteilen der XYZ in Ihrem Namen zu veröffentlichen. Gehen Sie einfach auf Ihrer Profilseite Twitter (oder Facebook) können Sie diese Einwilligung jederzeit widerrufen. Beachten Sie, dass das Zugriffstoken zurückgegebener das OAuth-Protokoll Anwendung und benutzerspezifisch ist. Der Benutzer muss sich mehrere apps anmelden, wenn er auf mehrere OAuth-basierten Anwendungen betreiben will. OAuth ist ein HTTP-basiertes Protokoll zur Authentifizierung von Benutzern. Du musst oft manuell, HTTP-Anforderungen zu schreiben, obwohl Sie könnten (z. B., um zu erfahren, wie die Dinge funktionieren "im Hintergrund"). Im Microsoft .NET Framework können Sie allgemeine Bibliotheken wie DotNetOpenAuth (Dotnetopenauth. NET) oder fertige Frameworks für ein bestimmtes soziales Netzwerk wie z. B. TweetSharp für Twitter und Facebook C# SDK für Facebook aufheben.

Wenn es darum geht, Authentifizierung, schauen Sie sich die Windows Azure Access Control Service. Dies kann als Verbundidentität Anbieter fungieren und kann mehrere Identität Anbieter Zuordnungen übersetzen. Es kann host OAuth und auf der Grundlage der Security Assertion Markup Language Token aus Active Directory. Es wird auch errichtet, um mit Facebook und die neue Klasse "ClaimsPrincipal" in das .NET Framework arbeiten.

Authentifizieren von Benutzern über Facebook

Lassen Sie uns beginnen mit einer grundlegenden ASP.NET MVC-Website und NuGet Stecker im Facebook C# SDK verwenden (siehe Abbildung 2). ASP.NET MVC-Beispiel-Site ist angereichert mit einen brandneuen Authentifizierung-Controller mit drei Methoden, die ich mit dem Namen FacebookLogin, FacebookAuthenticated und abmelden. Die ersten beiden Methoden stellen die beiden Schritte einer OAuth-Interaktion; die Methode der Abmeldung meldet nur den Benutzer aus der Host-Anwendung. Beachten Sie, dass die Abmeldung Aktion soll der Benutzer von Facebook anmelden ist nicht. OAuth und Facebook C# SDK nur verwalten die Authentifizierungslogik — beibehalten von Authentifizierungsinformationen über Cookies ist noch bis zu dem ASP.NET MVC-Website.

Referencing the Facebook C# SDK via NuGet
Abbildung 2 verweisen auf Facebook c# SDK über NuGet

Die Homepage der Website enthält einen Link für den Benutzer klicken, wenn sie sich einloggen will (siehe Abbildung 3). Der Link kann einfach ein Anker, ein Bild (oder Text) sein, der auf die FacebookLogin-Aktion auf dem Controller Authentifizierung zeigt:

    <a href="/Auth/Logon" >
      <img src="@Url.Content("~/Content/Images/loginfb.png")"  
        style="border:0" alt="Sign in with FB" />
    </a>

The Button to Trigger the Facebook Authentication Process
Abbildung 3 die Schaltfläche, um den Authentifizierungsprozess Facebook auslösen

In einer Norm ASP.NET MVC-Website gehört dieses Markup der Seite _logOnPartial.cshtml. Werfen Sie einen Blick auf die Authentifizierung-Controller.

In der FacebookLogin-Aktion – der Name ist beliebig – müssen Sie ein paar Dinge zu tun. Zuerst, ordnen Sie die URL, die vom Anbieter OAuth, einmal aufgerufen Ihre app, den Authentifizierungsschritt auszuführen, führen wird. Die URL wird in der Beispielanwendung, die ich überlege, die FacebookAuthenticated-Aktion auf dem Auth-Controller zeigen. Die handliche UriBuilder-Klasse können Sie für diese Art der Arbeit:

var uri = new UriBuilder(Request.Url)
  {
    Path = Url.Action("FacebookAuthenticated", "Auth")
  };

Das zweite, was zu tun, die FacebookLogin-Aktion ist die Facebook-URL für die Anmeldung zu arrangieren. Wenn Sie die Facebook C# SDK verwenden, ist hier der Code, den Sie benötigen:

var client = new FacebookClient();
var appId = ConfigurationManager.AppSettings["fb_key"];
var returnUri = uri.Uri.AbsoluteUri;
var fbLoginUri = client.GetLoginUrl(new
  {
    client_id = appId,
    redirect_uri = returnUri,
    response_type = "code",
    scope = "email"
  });

Die Parameter, die Sie an die GetLoginUrl-Methode übergeben helfen die URL vorzubereiten. Abbildung 4 werden die Parameter im Detail beschrieben. Die Aktion endet die FacebookLogin durch den Benutzer auf den zurückgegebenen Anmelde-URL umleiten.

Abbildung 4-Login-Parameter

Parameter Beschreibung
client_id ID der Facebook app fungiert als Proxy zwischen den Benutzer-app und die Facebook-Seite. Diese eindeutige Zeichenfolge erhalten Sie, wenn Sie Ihre Facebook-app registrieren.
redirect_uri URL wieder vollständige Authentifizierung (z. B. Identitätsinformationen zu greifen und ein Authentifizierungscookie erstellen).
response_type Dies kann sein "token" oder "Code" und bezieht sich auf wie Facebook das Zugriffstoken nach einer erfolgreichen Authentifizierung zurückgibt. Für Websites, es sollte sein "Code", da dadurch das Zugriffstoken — eine vertrauliche Information — nicht an die URL angehängt.
Umfang Gibt die zusätzlichen Berechtigungen, die Sie für den Benutzer anfordern möchten. Wenn Scope-Parameter leer ist, hat die app Zugriff auf grundlegende Informationen wie Name, Bild und Geschlecht des Benutzers. Über diesen Parameter können Sie die E-mail-Adresse, sowie die Veröffentlichung Stream Posten können anfordern. Die vollständige Liste der Berechtigungen ist abrufbar unter bit.ly/NCcAgf.

Um die Authentifizierung des Benutzers über Facebook (oder Twitter), müssen Sie eine app für Facebook (oder Twitter) zuerst registrieren und erhalten dann einige eindeutige Codes für diese Funktion. Um eine neue Facebook-app zu registrieren, gehen Sie zu bit.ly/mRw8BK. Bei der erfolgreichen Erstellung der app, Facebook gibt Ihnen eine app-ID-Zeichenfolge und eine app geheime Zeichenfolge angezeigt, die auf der Seite angezeigt, die Abbildung 5.

Registering a New Facebook App
Abbildung 5 eine neue Facebook App registrieren

Die app-ID und die app Geheimnis sind Facebook aus innerhalb einer Website oder einer anderen Art von app Benutzer Operationen erforderlich. Es ist üblich, die app-ID und die app Geheimnis in der Konfigurationsdatei der Wrapper app speichern:

<appSettings>
  <add key="fb_key" value="xxxxxxxxxxxx"/>
  <add key="fb_secret" value="yyyyyyyyyyyyyyyyyyyyy"/>
</appSettings>

Die Anmelde-URL von Facebook tut was es kann, um den Benutzer zu authentifizieren. Insbesondere, wenn der Benutzer aktuell bei Facebook angemeldet ist, ein Anfrage-Token ist vorbereitet und sofort zur angegebenen URL zurück gesendet werden – dies ist in diesem Fall die FacebookAuthenticated-Aktion. Wenn kein Benutzer derzeit auf dem Computer angemeldet ist, zeigt Facebook eine klassische Login-Seite. Auf diese Weise werden auch die Berechtigungen, die die app anfordert aufgelistet. Mindestens Berechtigungen betreffen E-mail-Adresse und Anzeigenamen. Sie enthalten jedoch die Berechtigung zum Veröffentlichen im Namen des Benutzers oder den Zugriff auf den Media-Stream, Freunde, Timeline und mehr. Der Benutzer ist ausdrücklich genehmigen oder Verweigern Berechtigungen angefordert. Referenzinformationen für volle Berechtigungen finden Sie unter bit.ly/P86tTC.

Den Authentifizierungsvorgang abschließen

Um Authentifizierung zu beenden, müssen Sie beantragen und analysieren das Zugriffstoken, wie in Abbildung 6. Die Methode ParseOAuth­CallbackUrl können Sie den Zugangscode von Facebook abrufen. Dieser Code ist nicht ausreichend, um das Facebook-Konto kontrollieren; Sie müssen es für ein Zugriffstoken austauschen. Gemäß dem OAuth-Protokoll erfordert dies ein weiterer Schritt und ein anderes HTTP-Anforderung. Sobald Ihre Website das Zugriffstoken für einen bestimmten Benutzer und eine bestimmte Facebook-app hält, erhält es Kontrolle über das Facebook-Konto für die Berechtigungen den Benutzer explizit erteilt. Absolutes Minimum haben Sie die Berechtigung zum Abrufen von Informationen über den Benutzer, wie z. B. vor- und Nachnamen und, wenn erlaubt, e-Mail-Adresse.

Abbildung 6 wird die Authentifizierung abgeschlossen

public ActionResult FacebookAuthenticated(String returnUrl)
{
  // Prepare the return URL
  var returnUri = new UriBuilder(Request.Url) {
    Path = Url.Action("FacebookAuthenticated", "Auth")
  };
 
  // Parse response to get the access code
  var client = new FacebookClient();
  var oauthResult = client.ParseOAuthCallbackUrl(Request.Url);
 
  // Exchange the code for the access token   
  dynamic result = client.Get("/oauth/access_token",
    new {
      client_id = ConfigurationManager.AppSettings["fb_key"],
      client_secret = ConfigurationManager.AppSettings["fb_secret"],
      redirect_uri = returnUri.Uri.AbsoluteUri,
      code = oauthResult.Code
    });
 
    // Saves the token to a cookie for further access
    var token = result.access_token;
    FbHelpers.AccessTokenSave(Response, token);
 
    // Grab identity information using the access token
    dynamic user = client.Get("/me",
      new {
        fields = "first_name,last_name,email",
          access_token = token
      });
 
    // Create the ASP.NET authentication cookie
    var userName = String.Format("{0} {1}",
      user.first_name, user.last_name);
  FormsAuthentication.SetAuthCookie(userName, false);
 
  // Back home
  return Redirect(returnUrl ?? "/");
}

Wenn Ihr einzige Zweck Benutzer über Facebook authentifiziert, das Norm Authentifizierungscookie ASP.NET erstellen und fertig. Wenn Ihre app mehr tun will (z. B. post im Auftrag des Benutzers), dann müssen Sie das Zugangs-Token zu speichern, damit es die gleiche Lebensdauer wie das Authentifizierungscookie gegeben werden kann. Sie können das Zugriffstoken in einer Datenbank oder in ein Cookie speichern. Besser noch, Sie erstellen einen benutzerdefinierten Prinzipal und Zugriffstoken als zusätzliche Benutzerdaten in das ASP.NET Authentifizierungscookie gespeichert. In meinem Beispiel-app, ich erstelle gerade einen zusätzlichen Cookie, das von der FbHelpers-Klasse verwaltet wird (siehe den beigefügten Quellcode für Details).

Beachten Sie jedoch, dass einige Regeln Ablauf das Zugriffstoken unterliegt. Wenn Sie Authentifizierung mithilfe von serverseitigen Code (d. h. senden Benutzer authentifizieren mit der Facebook-Seite, wie hier beschrieben), dann bekommen Sie eine langlebige Token, das 60 Tage dauert. Wenn Sie die JavaScript-SDK verwenden und eine clientseitige Authentifizierung versuchen, dann erhalten Sie kurzlebig-Token, das nach zwei Stunden abläuft. Sie können diese Dauer auf 60 Tage erweitern, indem Sie einen zweiten Anruf an einen bestimmten Endpunkt. Auf jeden Fall, sobald das Zugriffstoken abgelaufen ist, müssen Benutzer erneut authentifizieren und erneut einen gültigen Zugangs-Token. Hier ist eine gute Möglichkeit, die Codierung:

try {
  var client = new FacebookClient(...);
  dynamic result = client.Get("me/friends");
} catch (FacebookOAuthException) {
  // Your access token is invalid or expired.
}

Die ganze Geschichte ist im well-summarized bit.ly/Qfeh5s.

Entsendung eines Benutzers Wand

In einem Szenario mit OAuth Wenn Sie das Zugriffstoken für ein paar Benutzeranwendung halten/können Sie programmgesteuert die interaktive Vorgänge ausführen für die der Benutzer Berechtigungen der APP gewährt. Um eine Nachricht an die Wand des Benutzers zu buchen, benötigen Sie den folgenden Code:

public static void Post(String accessToken, String status)
{
  var client = new FacebookClient(accessToken);
  client.Post("/me/feed", new { message = status });
}

Diese Hilfsmethode aus innerhalb einer Controller-Aktion-Methode aufrufen. Die Tokenzeichenfolge Zugang muss überall dort, wo Sie gespeichert, ob ein benutzerdefinierter Cookie, das Authentifizierungscookie oder einem permanenten Speicher abgerufen werden. Wenn Sie das Zugriffstoken verloren, muss für den Post-Vorgang erfolgreich zu sein der Benutzer abmelden und wieder anmelden. Wenn Sie beabsichtigen, die Aufgaben gegen Facebook, ist das Speichern des Zugangs-Tokens in einer Weise, die Browser-Neustart überlebt Schlüssel. Abbildung 7 zeigt die Beispielanwendung, die Beiträge einer Meldung und des Benutzers Wand ordnungsgemäß aktualisiert.


Abbildung 7 Beitrag an die Wand

Ausblick: Windows Presentation Foundation

Zusammenfassend macht Facebook eine kräftigen API, durch die Entwickler Facebook-Inhalt und Logik mit eigenen Anwendungen integrieren können. Facebook apps sind sicherlich eingebettete Leben innerhalb der Grenzen von Facebook apps, aber sie sind auch klassische Web- oder desktop-Anwendungen nach außen Leben. In diesem Artikel habe ich die Facebook-SDK C# zwei einfache, aber durchaus üblich Operationen: Authentifizierung eines Benutzers einer Website mit ihrem Facebook-Konto und verwenden die Seiten der Website, an der Wand des aktuellen Benutzers gesendet werden. In der nächsten Spalte ich erweitern Sie die Facebook-APIs verwendet und erläutern, wie Sie dieselben Operationen aus einer Windows Presentation Foundation-Anwendung zu erreichen.

Dino Esposito ist der Autor von "Architecting Mobile Lösungen für Unternehmen" (Microsoft Press, 2012) und "Programmierung ASP.NET MVC 3" (Microsoft Press, 2011) und Mitautor von "Microsoft .NET: Architecting Applications for the Enterprise" (Microsoft Press, 2008). Esposito lebt in Italien und ist ein weltweit gefragter Referent für Branchenveranstaltungen. Folgen Sie ihm auf Twitter bei twitter.com/despos.

Unser Dank gilt dem folgenden technischen Experten für die Durchsicht dieses Artikels: Scott Densmore