2013-05-03 13 views
5

Ich bin neu in Visual Studio 2012 und MVC 4, und ich habe mit der SimpleMembershipProvider über die WebMatrix.WebData Bibliothek gearbeitet.Externer Login Account vs. Native Login Account

Ich möchte Facebook als externen Login-Quelle auf der Straße zu integrieren, aber es ist keine Anforderung ab sofort. Um jedoch ein gutes Gefühl für das zu bekommen, was ich benötige, habe ich das Tutorial und die Anleitung hier gefunden - http://www.asp.net/mvc/tutorials/mvc-4/using-oauth-providers-with-mvc.

Meine Frage:

Wenn ein Benutzer bereits verwenden wurde erstellt:

WebSecurity.CreateUserAndAccount(model.Email, model.Password); 
WebSecurity.Login(model.Email, model.Password); 

Können sie in der Zukunft „aufgerüstet“ auf ein oAuthMemebership Konto, wenn sie wählen, um ihren Facebook nutzen Zugangsdaten anstelle der E-Mail und des Passworts, die sie bei der ersten Anmeldung erstellt haben?

Ich konnte keine klare Antwort auf diese Frage in der Anleitung oder anderswo finden, also hoffe ich, dass jemand klären kann, wie dieser Prozess funktioniert.

+1

Ich denke, Sie haben mit inkompatiblen Typen zu tun. Sie können einfache Mitgliedschaft haben, Sie können OAuth haben, oder Sie können BEIDE verwenden. –

+0

@DaveA. Ich bin verwirrt. Wenn Sie "A" oder "B" oder "A und B" haben können, wie sind sie nicht kompatibel? –

+0

@AndyBrown Sie können einen Orangenbaum anbauen. Sie können einen Apfelbaum anbauen. Sie können einen Orangenbaum und einen Apfelbaum anbauen. Sie können keinen Apfel-Orangenbaum anbauen. –

Antwort

9

Die SimpleMembership-Einrichtung ermöglicht ein lokales und mehrere OAuth-Logins, die alle dasselbe teilen UserProfile - so kann sich ein einzelner Benutzer entweder mit einem lokalen Passwort oder mit FacebOogLiveWitter anmelden.

(Ich sollte angeben, dass ich in dieser Antwort davon ausgehe, dass der OAuth-Anbieter keine übereinstimmenden Informationen für ein lokales Konto zurücksendet. Wenn dies der Fall ist, sind die Prinzipien der tatsächlichen Zusammenführung identisch. aber die Komplexität und die Schritte sind erheblich reduziert.)

Der OAuth-Registrierungsprozess wird den Benutzer ablehnen, wenn sie einen vorhandenen Benutzernamen verwenden, anstatt zwei Konten zu versuchen und zusammenzuführen. Daher ist das nicht einfach, Sie müssen die Funktionalität selbst erstellen. Der Prozess ist komplex, da es viele Richtungen gibt, von denen der Benutzer herkommen kann (Sie könnten also vereinfachen, indem Sie nur ein oder zwei unterstützen), und Sie müssen auch die Sicherheit erzwingen, falls jemand versucht, in ein Konto zu münden, das ihm nicht gehört .

Ich gehe davon aus, dass Sie mit dem von Ihnen geposteten Link zufrieden sind und die Facebook-Hilfe unter (zum Beispiel) Facebook Login und The Login Flow for Web (without JavaScript SDK) befolgt haben, so dass Sie eine funktionierende Testanwendung haben.

Ihre allgemeine Prozess hat mehrere Benutzer Reise Ansätze haben Sinn für einen Benutzer zu machen:

  1. für einen angemeldeten Benutzer (mit einem lokalen Konto)
    1. lassen Sie sie auf Facebook anmelden und verbinden die Konten
    2. lassen sie ein vorhandenes Konto auf Ihrer Website fusionieren, die eine Facebook-Login verwendet
  2. für einen angemeldeten Benutzer (mit einem Facebook-Konto)
    1. lassen Sie sie erstellen ein lokales Konto
    2. lassen sie ein vorhandenes lokales Konto auf Ihrer Website verschmelzen
  3. für eine nicht angemeldete Benutzer, der ein lokales Konto zu registrieren versucht
    1. lassen sie diese fusionieren Neuer Account mit einer Facebook-Anmeldung, die bereits registriert ist, und dies im Rahmen des Registrierungsprozesses
  4. für einen nicht angemeldeten Benutzer, der versucht, sich zu registrieren (oder sich für th anmelden e erstmals) ein Facebook-Konto
    1. sie verbinden dies mit einem bestehenden lokalen Konto als Teil des Registrierungsprozesses lassen

usw.

ASK PERMISSION

(Sie können dies überspringen, wenn der OAuth-Anbieter eine übereinstimmende identifizierende Information zurückgeschickt hat, z. B. eine E-Mail-Adresse).

Sie sollten die Bestätigungssicherheit durchsetzen, normalerweise durch eine E-Mail-Bestätigung, die an das Zielkonto der Zusammenführung gesendet wird. Ansonsten:

  • jemand auf Ihrer Website mit Facebook zum ersten Mal
  • während dieses Prozesses anmelden kann sagen, dass sie „eigene“ die E-Mail-Adresse oder Benutzername eines lokalen Kontos (denken Sie daran, Facebook wird nicht unbedingt bestätigen, was ihre E-Mail ist für Sie)
  • und damit Zugriff auf die bestehenden lokalen

So Konto gewinnen, sobald die Zusammenführung „Anfrage“ gemacht wird, müssen Sie um Erlaubnis bitten, aus dem Zielkonto der Zusammenführung, um fortzufahren .

Die MVC 4 Account

Ich werde Facebook als unser OAuth Beispiel. Vergleichen, was passiert, wenn Sie einen Benutzer in Ihrem lokalen Authentifizierungs-Framework registrierenOAuth:

  • Local: erstellt einen Eintrag in webpages_Membership und einen Eintrag mit der gleichen Benutzer-ID in Userprofilen (vorausgesetzt, Sie die Standardtabellen für die MVC 4 Anwendungsvorlage verwenden)
  • OAuth: einen Eintrag in webpages_OAuthMembership erstellt und ein Eintrag mit dem gleichen Benutzer-ID in Userprofile

wir jetzt betrachten, was passiert, wenn sich ein Nutzer in Facebook zum ersten Mal mit:

  • Sie klicken auf Login auf Facebook (oder was auch immer Ihre Taste sagt)
  • sie auf Facebook getroffen zu bekommen
  • einzuloggen sie Erfolg haben (lassen Sie uns davon ausgehen, dass, und ignorieren Sie die Fehlerfall)
  • sie dann zugesandt bekommen, unsichtbar ihnen zu /Account/ExternalLoginCallback
  • OAuthWebSecurity.SerializeProviderUserId heißt, vorbei an den OAuth Details zu dieser Aktion
  • Sie bekommen zu /Account/ExternalLoginConfirmation weitergeleitet und gebeten, einen Benutzernamen für die neue Präsenz auf Ihrer Website
  • bereitzustellen Wenn dieser Benutzername verfügbar ist, dann Userprofile ein nd webpages_OAuthMembership-Einträge werden erstellt
  • Dieser Prozess ist Ihre Chance, die Konten durch das Zuordnen einiger eindeutiger Informationen zusammenzuführen. Solange Sie in UserProfile, webpages_Membership und webpages_OAuthMembership mit UserId enden, sollten Sie in Ordnung sein. Also müssen wir den Prozess an der Stelle /Account/ExternalLoginConfirmation abfangen. Wenn der OAuth-Anbieter eine übereinstimmende identifizierende Information wie beispielsweise eine E-Mail-Adresse zurücksendet, wird dies einfach. Testen Sie dies in der ExternalLoginConfirmation Aktion und führen Sie die automatische Zusammenführung mit einem ähnlichen Prozess wie dem unten beschriebenen durch.

    Allerdings kann/sollte ich nicht davon ausgehen, dass der Benutzer die gleiche E-Mail-Adresse für Ihre Site und OAuth verwendet, (noch sollten Sie aus vielen Gründen). Auch wahrscheinlich in der T & Cs für so etwas wie FacebOogLiveWitter hält es Sie auf die Frage nach der E-Mail ihres Kontos sowieso, und wenn sie es nicht tun, könnten sie in Zukunft.

    Also statt, können Sie die auf Alternativen basierten Konten verknüpfen, wie Benutzername oder E-Mail-Adresse, oder Telefonnummer. In jedem Fall benötigen Sie sie, um bestimmte Informationen einzugeben, die für ein Konto eindeutig sind, und ziehen das Zielkonto zurück.

    Wrapping up

    Also das alle zusammen zu setzen: Im ersten Teil dieser Antwort, die ich skizziert, wie Sie mehrere Benutzer Reisen fusionieren Konten berücksichtigen müssen. Ich werde das Beispiel 4.1 verwenden.

    Ihr Prozess müssen:

    (Annahme - wenn ein Benutzer erstes Register mit einem lokalen Konto, können Sie sie für eine E-Mail-Adresse stellen und validieren oder annehmen, dass es gültig ist)

    • Let der Benutzer-Login mit Facebook zum ersten Mal
    • bei Account/ExternalLoginConfirmation fragen, ob sie zu
        wollen
      • mit Ihnen ein neues Konto erstellen
      • Verwenden Sieihre Facebook-Login ein bestehendes Konto
    • Unter der Annahme, diese zu gelangen, dann melden Sie sich eine Anfrage in einer neuen Tabelle (vielleicht „MergeAccountRequests“) mit:
      • Das Facebook-Konto UserId
      • Das Ziel Merge lokales Konto UserId
      • Ein Autorisierungscode in der E-Mail zu verwenden, die Sie senden müssen (Von diesem Punkt an, wenn sie sich einloggen, ohne die Zusammenführung zu bestätigen, müssen sie auf eine Seite geschickt werden, um sie zu fragen, statt als Objekte in anderen DB-Tabellen zu erstellen, um die Sie sich später kümmern müssen)
    • Sie dann eine E-Mail an die Adresse des Ziel merge (local) senden Konto um Erlaubnis zu bitten, die merge (eine Standard-Bestätigungsmail mit einem Link) in Anspruch nehmen
    • Wenn sie auf diesen Link klicken oder geben Sie den Code ein, den Sie gesendet haben (Sie können sowohl SMS als auch E-Mail verwenden), dann müssen Sie die beiden Konten zusammenführen
    • Wählen Sie die "neuen" und "Zielkonten" (in diesem Fall "neu" ist der Facebook-Account) Da Ihnen noch keine Daten zugeordnet sind)
    • Löschen Sie das UserProfile des "neuen" KontosKonto
    • ändern Sie die Benutzer-ID der „neuen“ Konto webpages_OAuthMembership Tabelle auf das gleiche wie das „Ziel“ aus
    • Lügt den Benutzer (so gibt es je keine Komplikationen weshalb sie mit derzeit angemeldet)
    • Zeigen sie eine Nachricht an den Benutzer zu sagen ihnen die Zusammenführung fast abgeschlossen ist und dass sie sich nun einloggen, mit entweder Konto zu bestätigen und ergänzen die merge

Anstatt sie zu einer Login-Seite zu senden, ich würde ihnen die Login-Optionen neben der Bestätigungsmeldung.

+3

Danke für die ausführliche Antwort hier. – X3074861X

+0

Schöne Erklärung. Können wir mehrere externe Logins für einen Benutzer für einen Client haben? Ich habe Google, Facebook, Linkedin-Konten mit derselben E-Mail-Adresse. Kann ich mich jetzt mit allen diesen externen Konten in einer OAuth-App anmelden? – Venky