web-dev-qa-db-de.com

Wie soll ich OAuth für eine Anwendung implementieren?

Ich erstelle eine Anwendung für einen Kunden, der Folgendes ausführen muss:

  • Ermöglichen Sie Benutzern die Authentifizierung mit Google, Facebook, Twitter und LinkedIn.
  • Ermöglichen Sie Benutzern, nach der Anmeldung weitere Anbieter hinzuzufügen. (d. h., wenn sich der Nutzer bei Google authentifiziert hat, sollte er auch einen oder alle anderen Anbieter hinzufügen können.)
  • Ermöglichen Sie Benutzern das Importieren von Google-Kontakten, Facebook-Freundeslisten, Twitter-Followern und Linkedin-Freunden, um eine benutzerdefinierte Kontaktliste zu erstellen.

Wo kann man am besten anfangen, davon zu lernen? Gibt es einen Standard, den jeder für diese Dinge in .NET verwendet? Ich habe ein paar Stunden lang herumgegoogelt und obwohl es so aussieht, als würden die meisten Leute auf DotNetOpenAuth verweisen, finde ich anscheinend keine soliden Tutorials zur Verwendung der Bibliothek. Der Download kommt mit Beispielen, aber es verwirrt mich immer noch.

Ich nahm an, es wäre so einfach wie:

  • Konfigurieren Sie die Geheimnisse der Anbieter.
  • Beginnen Sie mit der Anmeldung beim Anbieter
  • Authentifizieren Sie den Benutzer mit einem Authentifizierungs-Cookie
  • Erstellen Sie einen Benutzerdatensatz in meiner Datenbank und speichern Sie die eindeutige ID des Anbieters.

Aber anscheinend hat jeder Anbieter seinen eigenen Code und alles ist so anders und verwirrend. Facebook hat ein Grafikobjekt, Twitter hat einen "InMemoryTokenManager", den ich nicht verstehe, und Google hat nicht einmal ein Authentifizierungsbeispiel, sondern nur ein Google-Adressbuchbeispiel. Und obendrein müssen Sie aus irgendeinem Grund Code-Teile aus einer ApplicationBlock-Demo in den Beispielen in Ihre eigene App kopieren, und das alles zu kompilieren, ohne zu wissen, was zum Teufel es versucht, ist eine mühsame Aufgabe.

Ich habe das Gefühl, dass mir bei all dem etwas Grundlegendes fehlt.

Auch eine Buchempfehlung wäre an dieser Stelle toll.

Ich glaube, ich verstehe die hochrangigen Konzepte von OAuth, aber wenn ich versuche, mich auf das Wesentliche einzulassen, verliere ich mich sofort.

13
Chev

Erstens macht es keinen Sinn, externe Bibliotheken zu verwenden, wenn Sie sich in Net 4.5 befinden, in dem die Standardvorlage von asp.net für die meisten dieser genannten Anbieter einen Authentifizierungscode enthält.

Zweitens, wenn Sie noch ein gutes Tutorial zu einigen Details der oauth2-Authentifizierung benötigen, schauen Sie sich diesen großartigen Beitrag von Ben Foster an. http://ben.onfabrik.com/posts/oauth-providers

Drittens gibt es leider kein einziges Protokoll, wenn Sie etwas anderes als die Authentifizierung benötigen. Somit hat jeder Anbieter seine eigene Art, diese zusätzlichen Daten offenzulegen - Kontakte, Beiträge usw. Man kann nicht viel dagegen tun, es hat nichts mit oauth2 zu tun, sondern ist nur eine Art, eine bestimmte API aufzurufen, die häufig zufällig ist Offenlegung als rest/xml-Webdienste basierend auf der oauth2-Authentifizierung. Das heißt, wenn Sie nur die Authentifizierung durchführen, ist das Protokoll für jeden Anbieter weitgehend identisch. Alles andere ist spezifisch.

Viertens würde ich mich an die von einem Anbieter zurückgegebene E-Mail-Adresse halten und nicht an die interne ID. Nicht alle Anbieter unterstützen die ID, wohingegen alle Benutzer-E-Mails zurückgeben können. Und Sie können diesen Informationen vertrauen, wenn Anbieter E-Mails überprüfen, bevor sie sie über oauth2 zurücksenden.

6
Wiktor Zychla

Ich schlage vor, Sie verwenden World Domination von PureKrome, es ist einfach zu bedienen, gut dokumentiert und sehr schön!

https://github.com/PureKrome/WorldDomination.Web.Authentication

Es verarbeitet Twitter, Google, Facebook ua mit einfachen Einzeilenkonfigurationen und alles andere.

Der Schöpfer hängt auch viel bei njabbr.net herum.

2
Moo

In der ASP.NET MVC 4-Vorlage 'Internet Application' ist DotNetOpenAuth implementiert. Wenn Sie dies noch nicht getan haben, sollten Sie einen Blick darauf werfen.

1
Malcolm O'Hare

Schauen Sie sich das Social Bootstrap API Projekt an (es verwendet ServiceStack, aber es ist schön zu sehen, dass all diese Modeworttechnologien in einem lesbaren Beispiel zusammenarbeiten).

Auch, wenn Sie einen besseren Überblick über die Funktionsweise von OAuth erhalten möchten, Mashape hat eine gute Erklärung . Das wird Ihnen einen Blick hinter die Kulissen werfen, die die meisten Wrapper implementieren.

Rick Strahl hat ein Beispiel das ich vor Jahren verwendet habe, um OpenID in MVC zu implementieren. Es ist ein bisschen veraltet, aber es war zu der Zeit eine der einfachsten Implementierungen. Einige Kundenstandorte, die ich mit dieser Implementierung erstellt habe, funktionieren noch einwandfrei.

0
Zachary Yates