2011-11-16 20 views
19

Empecé a codificar un LoginModule para Nancy, pero se me ocurrió que posiblemente necesite realizar la autenticación de otra manera. ¿Hay una forma aceptada de hacer auth en Nancy? Estoy planeando dos proyectos en este momento: servicio web y json. Necesitaré auth para ambos.¿Cómo debo manejar la autenticación con Nancy?

+1

muy seguro de lo que estás preguntando - ¿en qué estabas escribiendo y lo que es "una manera diferente"? La autenticación de formularios y la autenticación básica se admiten de manera inmediata. –

+0

Bueno, para el sitio web en Nancy, formularios funciona muy bien. Para mi servicio json, he escrito mi propia pieza de autenticación que comprueba una clave de API en cada solicitud. –

Respuesta

23

Como Steven escribe Nancy admite la autenticación básica y de formularios desde el primer momento. Echar un vistazo estas dos aplicaciones de demostración para ver cómo hacer cada uno: https://github.com/NancyFx/Nancy/tree/master/samples/Nancy.Demo.Authentication.Forms y https://github.com/NancyFx/Nancy/tree/master/samples/Nancy.Demo.Authentication.Basic

partir de la segunda de esas demos aquí es un módulo que requiere autenticación:

namespace Nancy.Demo.Authentication.Forms 
{ 
    using Nancy; 
    using Nancy.Demo.Authentication.Forms.Models; 
    using Nancy.Security; 

    public class SecureModule : NancyModule 
    { 
    public SecureModule() : base("/secure") 
    { 
     this.RequiresAuthentication(); 

     Get["/"] = x => { 
      var model = new UserModel(Context.CurrentUser.UserName); 
      return View["secure.cshtml", model]; 
     }; 
    } 
    } 
} 

y un fragmento de programa previo que configura la forma auth en la canalización de solicitud:

protected override void RequestStartup(TinyIoCContainer requestContainer, IPipelines pipelines, NancyContext context) 
    { 
     // At request startup we modify the request pipelines to 
     // include forms authentication - passing in our now request 
     // scoped user name mapper. 
     // 
     // The pipelines passed in here are specific to this request, 
     // so we can add/remove/update items in them as we please. 
     var formsAuthConfiguration = 
      new FormsAuthenticationConfiguration() 
      { 
       RedirectUrl = "~/login", 
       UserMapper = requestContainer.Resolve<IUserMapper>(), 
      }; 

     FormsAuthentication.Enable(pipelines, formsAuthConfiguration); 
    } 
+8

Esta respuesta es perfecta para un sitio web impulsado por Nancy. Para un servicio, todavía le falta algo a Nancy. He enviado una solicitud de extracción (https://github.com/NancyFx/Nancy/pull/650#issuecomment-6416528) que contiene una nueva pieza de autenticación sin estado. Ese tipo de autenticación redondea a Nancy (al menos para mí) como una gran tecnología de proveedor de servicios o web. –

+0

@ByronSommardahl Veo que su solicitud de extracción forma parte de Nancy ahora. ¡Bonito! –

Cuestiones relacionadas