2011-01-16 11 views
5

Chciałbym umożliwić moim użytkownikom logowanie się do mojej witryny przy użyciu mojego systemu logowania lub FB Connect lub Google Login. Nie chciałbym używać dużych bibliotek (takich jak dotnetOpenAuth) tylko dla tych 2 opcji - więc jak mam to zrobić?Logowanie za pomocą FB Connect/Google OAuth w .NET

Dodatkowe pytanie - w jaki sposób powinienem powiązać użytkownika FB/Google z moim wewnętrznym systemem użytkownika? Chciałbym zezwolić na logowanie się za pomocą obu (mogłem na przykład zalogować się przy użyciu FB, a następnie zalogować się w Google i nadal być związanym z tym samym użytkownikiem).

Używam ASP.NET MVC 2

Dzięki!

Odpowiedz

15

Jeśli nie lubisz używać dużych bibliotek, takich jak DotnetOpenAuth, będziesz musiał ręcznie wdrożyć protokół OpenID. Here are the specifications musisz się dostosować.

Powiedziawszy to, polecam korzystanie z istniejącej biblioteki. DotnetOpenAuth jest biblioteką odniesienia dla .NET.

Także mała uwaga: OpenId i OAuth są różnymi standardami i zostały zaprojektowane w celu osiągnięcia różnych rzeczy: OpenId służy do uwierzytelniania, natomiast OAuth służy do autoryzacji.

Jeśli chodzi o identyfikację tego samego użytkownika, który mógł logować się od różnych dostawców OpenID, to potrzebujesz czegoś, aby je zidentyfikować. Na przykład z DotnetOpenAuth podczas tworzenia żądania uwierzytelnienia do dostawcy OpenID można wymagać FullName oraz e-mail:

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 
    }); 
} 

i wykorzystać te informacje do identyfikacji użytkownika w obrębie wewnętrznej bazie danych.

Więc oto pomysł:

  1. utworzyć wewnętrzny tabeli bazy danych, która będzie zawierała użytkowników witryny. Na początku ta tabela jest pusta.
  2. Użytkownik przychodzi do Twojej witryny i chce z niej korzystać. Nie jest jeszcze uwierzytelniony, więc pytasz go o jego referencje. Dajesz mu możliwość wyboru dostawcy OpenID i przygotowania żądania uwierzytelnienia oraz przekierowania go do swojego dostawcy w celu uwierzytelnienia.
  3. Użytkownik uwierzytelnia się u swojego dostawcy i jest przekierowywany z powrotem do Twojej witryny. W tym momencie znasz swoją twierdzoną tożsamość i dodajesz użytkownika do tabeli użytkowników. Teraz użytkownik może zawsze wrócić do swojej witryny i zalogować się.
  4. Możesz zapewnić swoim uwierzytelnionym użytkownikom możliwość dodania innego dostawcy OpenID (tak jak robi to StackOverflow). Ważną ideą jest to, że użytkownik musi już być uwierzytelniony w swojej witrynie, aby to zrobić. Aby mógł wejść do swojego alternatywnego dostawcy OpenID i zostać przekierowany do tego dostawcy w celu uwierzytelnienia. Po uwierzytelnieniu zostaje przekierowany z powrotem do Twojej witryny, a ponieważ był już uwierzytelniony w Twojej witrynie, możesz dodać do tabeli użytkowników jego alternatywnego dostawcę OpenId.
  5. Czynność kontrolera, która obsłuży przekierowanie od dostawcy OpenId, powinna sprawdzić, czy użytkownik jest już uwierzytelniony w witrynie, a jeśli nie, uwierzytelnić go za pomocą FormsAuthentication.GetAuthCookie i przekazać deklarowaną tożsamość. Jeśli deklarowana tożsamość nie istnieje w tabeli użytkowników wewnętrznych, musisz ją dodać. Jeśli użytkownik jest już uwierzytelniony w swojej witrynie, oznacza to, że dodaje alternatywnego dostawcę OpenId do swojego profilu, aby zaktualizować tabelę użytkowników i dodać do niej nowego dostawcę.
+0

Być może znasz jakieś małe wdrożenie do systemu logowania Google? – Roman

+0

@roman, osobiście używam DotnetOpenAuth. –

+0

Dziękuję. Po prostu bałem się, że to zbyt skomplikowane i w 100% niezawodne. Czy to jest? :) – Roman