2011-01-16 12 views
5

Vorrei consentire ai miei utenti di accedere al mio sito Web utilizzando il mio sistema di accesso, FB Connect o Google Login. Non vorrei usare grandi librerie (come dotnetOpenAuth) solo per quelle 2 opzioni - Quindi come dovrei farlo?Accesso con FB Connect/Google OAuth in .NET

Domanda aggiuntiva: come devo associare l'utente FB/Google al mio sistema utente interno? Mi piacerebbe consentire di accedere utilizzando entrambi (potrei ad esempio accedere utilizzando FB e quindi accedere con Google, e comunque essere associato allo stesso utente).

che sto utilizzando ASP.NET MVC 2

Grazie!

risposta

15

Se non ti piace utilizzare grandi librerie come DotnetOpenAuth dovrai implementare manualmente il protocollo OpenID. Here are the specifications sarà necessario conformarsi a.

Detto questo, ti consiglierei di utilizzare una libreria esistente. DotnetOpenAuth è la libreria di riferimento per .NET.

Anche una piccola osservazione: OpenId e OAuth sono standard diversi e sono progettati per ottenere diverse cose: OpenId è per l'autenticazione mentre OAuth è per l'autorizzazione.

Per quanto riguarda l'identificazione dello stesso utente che potrebbe eseguire il log da diversi provider OpenID, è necessario identificare gli utenti. Ad esempio, con DotnetOpenAuth quando si crea una richiesta di autenticazione al provider OpenID si potrebbe richiedere l'FullName 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 
    }); 
} 

e utilizzare queste informazioni per identificare l'utente all'interno del vostro database interno.

Quindi, ecco l'idea:

  1. Si crea una tabella di database interno che conterrà gli utenti del sito. All'inizio questa tabella è vuota.
  2. Un utente arriva al tuo sito e desidera utilizzarlo. Non è ancora autenticato, quindi gli chiedi le sue credenziali. Gli fornisci la possibilità di scegliere il suo provider OpenId e preparare una richiesta di autenticazione e reindirarlo al suo provider per l'autenticazione.
  3. L'utente si autentica con il proprio provider e viene reindirizzato al proprio sito. In questo momento conosci la sua identità dichiarata e aggiungi l'utente alla tua tabella utenti. Ora l'utente può sempre tornare al tuo sito e accedere.
  4. È possibile fornire agli utenti autenticati la possibilità di aggiungere un altro provider OpenId (proprio come StackOverflow). L'idea importante è che l'utente abbia bisogno di essere già autenticato sul tuo sito per farlo. Così ha potuto inserire il suo provider OpenId alternativo e essere reindirizzato a questo provider per l'autenticazione. Una volta autenticato, viene reindirizzato al tuo sito e poiché è già stato autenticato sul tuo sito puoi aggiungere alla tabella degli utenti il ​​suo fornitore OpenId alternativo.
  5. L'azione del controller che gestirà il reindirizzamento dal provider OpenId dovrebbe verificare se l'utente è già autenticato sul tuo sito e se non lo autentica utilizzando FormsAuthentication.GetAuthCookie e passando l'identità richiesta. Se l'identità richiesta non esiste nella tabella degli utenti interni, è necessario aggiungerla. Se l'utente è già autenticato sul tuo sito, significa che sta aggiungendo un provider OpenId alternativo al suo profilo, in modo da aggiornare la tabella degli utenti e aggiungervi il nuovo provider.
+0

forse sai qualche piccola implementazione del sistema di accesso di Google? – Roman

+0

@roman, personalmente uso DotnetOpenAuth. –

+0

Grazie. Avevo solo paura che fosse troppo complicato e affidabile al 100%. È? :) – Roman

Problemi correlati