2011-01-16 14 views
5

Me gustaría permitir a mis usuarios iniciar sesión en mi sitio web utilizando mi sistema de inicio de sesión, FB Connect o Google Login. No me gustaría usar grandes bibliotecas (como dotnetOpenAuth) solo para esas 2 opciones. Entonces, ¿cómo debo lograr esto?Iniciar sesión con FB Connect/Google OAuth en .NET

Pregunta adicional: ¿cómo debo unir al usuario de FB/Google a mi sistema de usuario interno? Me gustaría permitir el inicio de sesión usando ambos (podría, por ejemplo, iniciar sesión usando FB y luego iniciar sesión con Google, y seguir estando vinculado al mismo usuario).

estoy usando ASP.NET MVC 2

Gracias!

Respuesta

15

Si no desea utilizar bibliotecas grandes como DotnetOpenAuth, deberá implementar manualmente el protocolo OpenID. Here are the specifications deberá cumplir.

Dicho esto, le recomendaría que utilice una biblioteca existente. DotnetOpenAuth es la biblioteca de referencia para .NET.

También una pequeña observación: OpenId y OAuth son estándares diferentes y están diseñados para lograr cosas diferentes: OpenId es para autenticación, mientras que OAuth es para autorización.

En cuanto a la identificación del mismo usuario que podría registrar de diferentes proveedores de OpenID, necesitará algo para identificarlos. Por ejemplo, con DotnetOpenAuth al crear una solicitud de autenticación al proveedor de OpenID que podría requerir la NombreCompleto y el 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 
    }); 
} 

y utilizar esta información para identificar al usuario dentro de su base de datos interna.

Así que aquí es la idea:

  1. Se crea una tabla de base de datos interna que contendrá los usuarios del sitio. Al principio esta tabla está vacía.
  2. Un usuario llega a su sitio y desea usarlo. Todavía no está autenticado, así que le pides sus credenciales. Usted le brinda la posibilidad de elegir su proveedor OpenId y preparar una solicitud de autenticación y redirigirlo a su proveedor para la autenticación.
  3. El usuario se autentica con su proveedor y se le redirige a su sitio. En este momento, conoce su identidad reclamada y agrega el usuario a su tabla de usuarios. Ahora el usuario siempre puede regresar a su sitio e iniciar sesión.
  4. Puede proporcionar la posibilidad a sus usuarios autenticados de agregar otro proveedor OpenId (al igual que StackOverflow). La idea importante es que el usuario debe estar autenticado en su sitio para poder hacerlo. Para poder ingresar a su proveedor alternativo de OpenId, se lo redireccionará a este proveedor para su autenticación. Una vez que se autentica, se le redirige a su sitio y, como ya estaba autenticado en su sitio, puede agregar a la tabla de usuarios su proveedor OpenId alternativo.
  5. La acción del controlador que manejará la redirección desde el proveedor OpenId debe verificar si el usuario ya está autenticado en su sitio y si no lo autentifica usando FormsAuthentication.GetAuthCookie y pasando la identidad reclamada. Si la identidad reclamada no existe en su tabla de usuarios internos, debe agregarla. Si el usuario ya está autenticado en su sitio, significa que está agregando un proveedor OpenId alternativo a su perfil, por lo que debería actualizar su tabla de usuarios y agregarle el nuevo proveedor.
+0

tal vez conozca alguna pequeña implementación en el sistema de inicio de sesión de Google? – Roman

+0

@roman, personalmente uso DotnetOpenAuth. –

+0

Gracias. Me temo que es demasiado complicado y 100% confiable. ¿Lo es? :) – Roman

Cuestiones relacionadas