2010-11-18 16 views
6

estoy un poco perdido mediante la autenticación con MVC ...mejor opción de autenticación personalizado utilizando ASP .NET MVC (caché, cookies ...)

Estoy buscando la mejor opción para usar en una gran comercio electrónico sitio, donde el rendimiento es la máxima prioridad ...

las dos opciones Estoy buscando hasta ahora son:

  • Crear una FormsAuthenticationTicket y cifrarlo en un galletas, al igual que implementa aquí: Cookie implementation
  • caché los datos de autenticación, así:

    protected void Application_AuthenticateRequest(object sender, EventArgs e) 
    { 
        if (HttpContext.Current.User != null) 
        { 
         if (HttpContext.Current.User.Identity.IsAuthenticated) 
         { 
          if (HttpContext.Current.User.Identity is FormsIdentity) 
          { 
           // Get Forms Identity From Current User 
           FormsIdentity id = FormsIdentity)HttpContext.Current.User.Identity; 
           // Create a custom Principal Instance and assign to Current User (with caching) 
           Customer principal = (Customer)HttpContext.Current.Cache.Get(id.Name); 
           if (principal == null) 
           { 
            // Create and populate your Principal object with the needed data and Roles. 
            principal = MyBusinessLayerSecurityClass.CreatePrincipal(id, id.Name);        
            HttpContext.Current.Cache.Add(
            id.Name, 
            principal, 
            null, 
            System.Web.Caching.Cache.NoAbsoluteExpiration, 
            new TimeSpan(0, 30, 0), 
            System.Web.Caching.CacheItemPriority.Default, 
            null); 
           } 
           HttpContext.Current.User = principal; 
          } 
         } 
        } 
    } 
    

Caching sample here

Qué piensan ustedes?

Gracias

Respuesta

4

A más MVCish manera de lograr esto es escribir una costumbre AuthorizeAttribute y realizar esto en un método OnAuthorization anulado en lugar de utilizar Application_AuthenticateRequest.

Dicho esto, creo que su implementación es bastante buena. Como alternativa al almacenamiento de la información adicional en la memoria caché, puede almacenarla en la parte userData del ticket de autenticación si esta información no es muy grande, por supuesto. Ambos enfoques son viables. Si decide utilizar el almacenamiento en caché, le recomendaría que lo descargue en servidores de caché dedicados en lugar de almacenarlo en la memoria de los servidores web.

Cuestiones relacionadas