none
Usuario, permisos, roles...¿sessión?¿cookie de autenticación? RRS feed

  • Pregunta

  • Hola,

    llevo leyendo todo el día el tema de la autenticación y autorización de los usuarios en una aplicación de ASP.NET MVC. Tengo algunas cosas claras pero aun me quedan algunas dudas, os cuento: 

    Estoy implementando una aplicación en MVC2 y acabo de entrar en la parte de los usuarios.

    Por un lado la AUTENTICACIÓN la realizo por medio de autenticacion integrada de Windows lo que ya me valida directamente el usuario y la cookie de ASP.NET queda autenticada(HttpContext.Current.User).

    Ahora vienen mis dudas sobre la AUTORIZACIÓN, creo que debería utilizar AuthorizeAttribute, guardando los roles del usuario en la cookie de autenticación al iniciar la aplicación(Application_PostAuthenticateRequest en Global.asax). Mi problema es que además de roles, tengo permisos y departamentos para permitir o denegar acceso a los usuarios....y no se donde guardar eso exactamente.¿Creando un filtro que derive de AuthorizeAttribute? No se hasta que punto guardar los roles en una cookie es seguro...y si un usuario malintencionadamente puede introducir algún rol que no debe...

    Luego por otro lado tengo algunas variable como el nombre completo del usuario que tengo que guardar, mientras dure su navegación...donde lo hago?¿Sessión?También e visto algo sobre crear una clase de derive de IIdentity...

    Muchas gracias de antemano.

    Saludos!

    miércoles, 17 de octubre de 2012 15:29

Todas las respuestas

  • El atributo AuthorizeAttribute únicamente podrá verificar membresía de grupos de Active Directory.  Si además de eso usted maneja alguna forma propietaria de refinar los permisos, usted deberá escribir rutinas de autorización usted mismo.

    Jose R. MCP
    Code Samples

    miércoles, 17 de octubre de 2012 20:04
  • Hola Silvia3, aunque como dice webJose, puedes hacerte un AuthorizeAttribute personalizado o por ejemplo una forma rápida es usar Profiles.  Añades esto en el web.config

    <profile>
      <providers>
        <clear/>
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
      </providers>
      <properties>
        <add name="FirstName" />
        <add name="LastName" />
        <add name="Departament" />
      </properties>
     </profile>
    

    Y luego en tu controlador solo tienes que hacer:

    string name = Profile.GetPropertyValue("FirstName") + " " + Profile.GetPropertyValue("LastName");
    string dep = Profile.GetPropertyValue("Departament")

    Con eso puedes jugar para establecer permisos en base a un atributo personalizado tal que:

    using System;
    using System.Web.Mvc;
    using System.Web;
    
    namespace MiApp.CustomAttributes {
      public class PersonalizeAuthorizationAttribute : AuthorizeAttribute {
        protected override bool AuthorizeCore(HttpContextBase httpContext) {
          if (!httpContext.Profile.GetPropertyValue("dep") == "mkt") {
            return true;
          }
          return true;
        }
      }
    }


    miércoles, 24 de octubre de 2012 0:23