template tag route mvc for data cshtml asp all _layout asp.net-mvc dotnetopenauth nerddinner

asp.net-mvc - tag - select asp-for asp-items



Solicitud de tutorial para agregar Openid Support a la aplicaciĆ³n MVC ASP.NET de NerdDinner (5)

Estoy buscando aprender sobre ASP.NET MVC y OpenId usando el tutorial ASP.NET MVC NerdDinner.

Me gustaría reemplazar el sistema de autenticación en NerdDinner para que sea solo OpenId. He descargado las últimas bibliotecas de DotNetOpenAuth, pero no estoy seguro de cómo ponerlo todo junto. ¿Alguien puede ayudar con un tutorial paso a paso rápido?

¿Es esto tan simple como ingresar a la biblioteca o también se necesitan cambios significativos en la aplicación?


Hay un kit de inicio de membresía en codeplex que debe ser lo que está buscando. Ambos deben seguir el modelo del proveedor (lea sobre él) si siguen la convención de autenticación de Microsoft.

http://mvcmembership.codeplex.com/


Mire el directorio Samples / OpenIdRelyingPartyMvc (un sitio web simple de ASP.NET MVC que usa la autenticación OpenId). Puede comenzar copiando Inicio / Controladores de usuario / Vistas y configuraciones de web.config en su proyecto. Creo que es la forma más rápida de otorgar autenticación OpenId a su sitio. Luego, como dijo Alexander Prokofyev , hay una publicación muy útil en el blog de Andrew Arnott (autor de DotNetOpenAuth / DotNetOpenId) - Agregue soporte de inicio de sesión OpenID a su sitio ASP.NET MVC



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

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

  • Agregué una referencia al ensamblaje de DotNetOpenAuth
  • Se agregó un nuevo "UserController" y se copió en el código del UserController de la muestra.
  • agregó las declaraciones de uso correctas y cambió el espacio de nombres para reflejar NerdDinner.Controllers
  • recrearon vistas de "Usuario" similares de la muestra, cambiándolas adecuadamente para reflejar las ID de contenido maestro del sitio.
  • agregó una vista xrds bajo el controlador de casa. (no estoy seguro de lo que hace esto todavía)
  • cambió el índice y agregue los métodos Xrds ActionResult en el HomeController para reflejar la muestra.
  • cambió el archivo web.config (en la carpeta raíz) Autenticación para cambiar la ruta de inicio de sesión al nuevo UserController y al método de inicio de sesión
  • Cambie los enlaces de acción "LogOnUserControl" para que apunten al nuevo UserControl y los métodos de "Iniciar sesión" y "Cerrar sesión".
  • Muck alrededor con las distintas vistas que llaman directamente a la funcionalidad de inicio de sesión

En este momento esto funciona de forma limitada. Puedo iniciar sesión e interactuar con la aplicación NerdDinner con un OpenID. Así que eso es genial. Sin embargo, alguna funcionalidad aún no funciona. Guardar una cena creada no funciona pero tampoco se cuelga. Tendré que investigar cómo migrar algunas de las funciones de membresía en AccountController a UserController. Voy a actualizar este post (sugerencias y sugerencias de bienvenida).


Una vez que descargue dotnetopenid , busque 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 Controllers / UserController.cs. Aquí está la acción de autenticación:

//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();