2011-01-16 6 views
5

Ich möchte meinen Benutzern erlauben, sich mit meinem Login-System oder FB Connect oder Google Login bei meiner Website anzumelden. Ich würde keine großen Bibliotheken (wie dotnetOpenAuth) für nur diese beiden Optionen verwenden wollen - Wie soll ich das erreichen?Anmeldung mit FB Connect/Google OAuth in .NET

Zusätzliche Frage - wie soll ich den FB/Google-Benutzer an mein inneres Benutzersystem binden? Ich würde es gerne zulassen, dass ich mich mit beiden anmelde (ich könnte mich zum Beispiel mit FB einloggen und dann bei Google einloggen und trotzdem an denselben Benutzer gebunden sein).

Ich bin mit ASP.NET MVC 2

Dank!

Antwort

15

Wenn Sie keine großen Bibliotheken wie DotnetOpenAuth verwenden möchten, müssen Sie das OpenID-Protokoll manuell implementieren. Here are the specifications müssen Sie sich anpassen.

Dies gesagt, würde ich Ihnen empfehlen, eine vorhandene Bibliothek zu verwenden. DotnetOpenAuth ist die Referenzbibliothek für .NET.

Auch eine kleine Bemerkung: OpenId und OAuth sind verschiedene Standards und sind entworfen, um verschiedene Dinge zu erreichen: OpenId ist für die Authentifizierung, während OAuth für die Autorisierung ist.

Soweit es um die Identifizierung desselben Benutzers geht, der von verschiedenen OpenID-Anbietern protokolliert werden kann, benötigen Sie etwas, um sie zu identifizieren. Zum Beispiel mit DotNetOpenAuth wenn eine Authentifizierungsanforderung an den OpenID-Provider Erstellen Sie den Fullnamen und die E-Mail benötigen könnten:

using (var openid = new OpenIdRelyingParty()) 
{ 
    var request = openid.CreateRequest(Identifier.Parse(openid_identifier)); 

    request.AddExtension(new ClaimsRequest 
    { 
     BirthDate = DemandLevel.NoRequest, 
     Email = DemandLevel.Require, 
     FullName = DemandLevel.Require 
    }); 
} 

und verwenden diese Informationen, um die Benutzer in Ihrer internen Datenbank zu identifizieren.

Also hier ist die Idee:

  1. Sie erstellen eine interne Datenbanktabelle, die Ihre Website-Benutzer enthalten. Zu Beginn ist diese Tabelle leer.
  2. Ein Benutzer kommt auf Ihre Website und möchte sie verwenden. Er ist noch nicht authentifiziert, also fragen Sie ihn nach seinen Referenzen. Sie geben ihm die Möglichkeit, seinen OpenId-Provider auszuwählen, eine Authentifizierungsanfrage vorzubereiten und ihn zur Authentifizierung an seinen Provider weiterzuleiten.
  3. Der Benutzer authentifiziert sich bei seinem Provider und wird zurück auf Ihre Site geleitet. In diesem Moment kennen Sie seine behauptete Identität und Sie fügen den Benutzer zu Ihrer Benutzertabelle hinzu. Jetzt kann der Benutzer immer wieder auf Ihre Seite zurückkehren und sich einloggen.
  4. Sie könnten Ihren authentifizierten Benutzern die Möglichkeit geben, einen weiteren OpenId-Provider hinzuzufügen (genau wie StackOverflow). Die wichtige Idee ist, dass der Benutzer bereits zu Ihrer Website authentifiziert sein muss, um dies zu tun. Er könnte also seinen alternativen OpenId-Provider eingeben und zur Authentifizierung an diesen Provider weitergeleitet werden. Sobald er sich authentifiziert hat, wird er zurück auf Ihre Seite geleitet und da er bereits auf Ihrer Seite authentifiziert wurde, könnten Sie der Benutzer-Tabelle seinen alternativen OpenId-Provider hinzufügen.
  5. Die Controller-Aktion, die die Umleitung vom OpenId-Provider behandelt, sollte überprüfen, ob der Benutzer bereits für Ihre Site authentifiziert ist und ihn nicht mit FormsAuthentication.GetAuthCookie authentifizieren und die behauptete Identität weitergeben. Wenn die beanspruchte Identität in Ihrer internen Benutzertabelle nicht vorhanden ist, müssen Sie sie hinzufügen. Wenn der Benutzer bereits für Ihre Site authentifiziert wurde, bedeutet dies, dass er einen alternativen OpenId-Provider zu seinem Profil hinzufügt, sodass Sie Ihre Benutzertabelle aktualisieren und den neuen Provider hinzufügen.
+0

Vielleicht kennen Sie eine kleine Implementierung im Google Login-System? – Roman

+0

@roman, persönlich verwende ich DotnetOpenAuth. –

+0

Danke. Ich hatte nur Angst, es ist zu kompliziert und 100% zuverlässig. Ist es? :) – Roman