2009-06-01 8 views
26

Estoy buscando información sobre ASP.NET MVC y OpenId utilizando el tutorial ASP.NET MVC NerdDinner.Solicitud de Tutorial para agregar Openid Support a la aplicación NerdDinner ASP.NET MVC

Me gustaría reemplazar el sistema de Autenticación en NerdDinner para que sea OpenId solamente. He descargado las últimas librerías DotNetOpenAuth pero no estoy seguro de cómo armarlo todo. ¿Alguien puede ayudarme con un rápido tutorial paso a paso?

¿Es esto tan simple como dejar caer en la biblioteca o hay cambios significativos necesarios para la aplicación también?

+1

+1 por un "yo" – Nifle

Respuesta

14

Una vez que descargue dotnetopenid, mira en el directorio samples \ RelyingPartyMvc. Hay una muestra donde reemplazan el sistema de autenticación MVC predeterminado con OpenID. El código relevante está en Controladores/UserController.cs. Aquí está la acción Autenticar:

//Stage 1: Show form asking for Open ID identifier URL 
var openid = new OpenIdRelyingParty(); 
if (openid.Response == null) { 
    // Stage 2: user submitting Identifier 
    Identifier id; 
    if (Identifier.TryParse(Request.Form["openid_identifier"], out id)) { 
      openid.CreateRequest(Request.Form["openid_identifier"]).RedirectToProvider(); 
    } else { 
      ViewData["Message"] = "Invalid identifier"; 
      return View("Login"); 
      } 
} else { 
    // Stage 3: OpenID Provider sending assertion response 
    switch (openid.Response.Status) { 
     case AuthenticationStatus.Authenticated: 
      FormsAuthentication.RedirectFromLoginPage(openid.Response.ClaimedIdentifier, false); 
      break; 
     case AuthenticationStatus.Canceled: 
      ViewData["Message"] = "Canceled at provider"; 
      return View("Login"); 
     case AuthenticationStatus.Failed: 
      ViewData["Message"] = openid.Response.Exception.Message; 
      return View("Login"); 
    } 
} 
return new EmptyResult(); 
+0

He descargado el código y leído las instrucciones, pero aún no está claro cómo encaja todo. El ejemplo de NerdDinner tiene el AccountController predeterminado. Los servicios de autentificación y membresía están contenidos en AccountController. ¿El código anterior debe fusionarse en ese controlador? – TMC2K

+0

El código anterior usa un controlador llamado UserController. Esto es básicamente un reemplazo del AccountController. Solo necesitaría actualizar sus enlaces o rutas para señalarlo en consecuencia. – nikmd23

+0

Este ejemplo parece usar el paquete dotnetopenid y no el paquete dotnetopenauth más nuevo que lo reemplazó. – itchi

0

Hay un kit de inicio de membresía en Codeplex que debería ser lo que estás buscando. Ambos deberían seguir el modelo del proveedor (leer sobre él) si siguen la convención de autenticación de Microsoft.

http://mvcmembership.codeplex.com/

+1

Tenga cuidado con este. Pasaron varios meses fuera de fecha y ni siquiera compila de nuevo. Con suerte, los propietarios del proyecto lo revolverán pronto. –

1

Look en el directorio Samples/OpenIdRelyingPartyMvc (un simple sitio web ASP.NET MVC con autenticación OpenId). Puede comenzar copiando Inicio/Controles de usuario/Vistas y configuraciones desde web.config en su proyecto. Creo que es la forma más rápida de otorgarle a su sitio autenticación de OpenId. Entonces, as Alexander Prokofyev said, no hay post muy útil en el Andrew Arnott's (DotNetOpenAuth/DotNetOpenId author) blog-Add OpenID login support to your ASP.NET MVC site

6

Ok, ¡Así que tengo este tipo de trabajo! La respuesta es una combinación de las respuestas a continuación más algunos problemas con los controladores y las vistas.

Primero download DotNetOpenAuth y navegue hasta el directorio de ejemplos donde puede encontrar el código OpenIdRelayingPartyMvc. En mi solución NerdDinner,

  • He añadido una referencia al ensamblado DotNetOpenAuth
  • añade el nuevo un "UserController" y se copia en el código de UserController de la muestra
  • añaden las declaraciones usando correctas y le cambió el espacio de nombres para reflejar NerdDinner.Controllers
  • recreó vistas similares de "Usuario" de la muestra, cambiándolas adecuadamente para reflejar los ID del contenido del sitio maestro.
  • agregó una vista xrds bajo el controlador doméstico. (no estoy seguro de qué hace esto aún)
  • cambió el índice y agregó los métodos Xrds ActionResult en el HomeController para reflejar la muestra.
  • cambió la web.config file (en la carpeta raíz) Autentique la sección para cambiar la ruta de inicio de sesión al nuevo UserController y método de inicio de sesión
  • Cambie los ActionLinks "LogOnUserControl" para apuntar a los nuevos métodos UserControl y "Login" y "Logout".
  • lodo alrededor con los diversos puntos de vista que llamar directamente al registro en la funcionalidad

En este momento esto funciona de una manera limitada. Puedo iniciar sesión e interactuar con la aplicación NerdDinner con un OpenID. Así que eso es genial. Sin embargo, algunas funcionalidades aún no funcionan. Guardar una cena creada no funciona, pero tampoco funciona. Tendré que investigar cómo migrar parte de la funcionalidad de membresía en AccountController a UserController. Actualizaré esta publicación (sugerencias y sugerencias de bienvenida).

Cuestiones relacionadas