none
INICIO DE SESSION EN MVC .NET CON ORACLE RRS feed

  • Pregunta

  • Saludos a todos,

    Estoy creando un sitio en donde ya cuento con la informacion de usuario y clave de todos los usuarios de la empresa en una base de datos oracle, la cual me deveuelve por paquetes la informacion de los usuarios que se autentican. Tengo un metodo que me valida si el usuario existe en la bd o no y me retorna true o false. El punto es que puedo autenticarme y cuando es true me retorna la vista que quiero que me muestre, pero si quiero aplicar el filtro de mvc [Authorize] no me permite ver el contenido, pero si no lo coloco, puedo acceder a mis demas action sin nesesidad de loguerme.. 

    Alguna idea de como evitar acceder a mis action que me retornan vistas sin autenticarme.? espero hacerme entender.

    jueves, 22 de marzo de 2018 16:21

Todas las respuestas

  • Tiene dos opciones:  Crear una clase que implemente IPrincipal (o que herede de ClaimsPrincipal, o tal vez inclusive que solamente use ClaimsPrincipal), luego crear un objeto de esa clase en Global.asax PostAuthenticationRequest basándose en un cookie, por ejemplo, y luego ya AuthorizeAttribute le funcionará pues hará una llamada a IPrincipal.IsInRole(), que estaría implementado en su clase.  Desde ahí puede usted, basándose en información de base de datos, decidir si el usuario pertenece o no al rol que AuthorizeAttribute quiere probar.

    La otra es crear su propio AuthorizeAttribute.  Puede derivar uno nuevo a partir de AuthorizeAttribute, o bien puede crear uno nuevo que herede de FilterAttribute y que implemente la interfaz IAuthenticationFilter.  La implementación iría en el método OnAuthorization().  Allí puede usted de alguna manera (como un cookie) identificar al usuario, para luego determinar los roles a los que pertenece, para finalmente decidir si autoriza o no.  Para autorizar, no hacemos nada especial; para desautorizar ponemos algo en la propiedad Result del parámetro filterContext.  Algo como new HttpUnautohrizedResponse(), o bien new RedirectResult("~/Home/Login").


    Jose R. MCP
    Code Samples

    jueves, 22 de marzo de 2018 17:21
  • Hola Jose,

    depronto conoces algún tutorial de ejemplo? la verdad soy reNuevo en el tema.

    Le cuento que yo tengo ya creado un metodo que me valida si un usuario existe en la base de datos. lo que pretendo es loguearme(lo cual ya lo logro) pero trabajar de ahí en adelante con la session de usuario. 

    gracias

    jueves, 22 de marzo de 2018 21:51
  • Ningún ejemplo a mano, por desgracia.  Pero siga mis instrucciones.  Nótese que en tema de seguridad, hay 2 conceptos:  Autenticación y Autorización.  La función que usted dice tener tiene toda la pinta de ser Autenticación.  No sé si también busca la parte de autorización.

    Yo pienso que tal vez lo más directo es crear un nuevo atributo a partir de AuthorizeAttribute.  En OnAuthorization coloca el código de autenticación que ya dice tener.  Si, además de autenticar, necesita autorizar (ver si el recurso particular necesita chequeo adicional, como por ejemplo pertenecer a un rol específico), pues necesitará incluir código para esto.  Pero por ahora puede comenzar con crear un atributo que autentique.


    Jose R. MCP
    Code Samples

    viernes, 23 de marzo de 2018 1:24
  • LIsto Jose, voy a intentarlo y te estare comentando como me fue..

    Mil gracias por su valiosa ayuda.

    viernes, 23 de marzo de 2018 2:24
  • Hola Jose,

    Le comento que he seguido el ejemplo tal cual y al parecer todo en orden, hasta el momento en que valida la información de la vista( user y pass) y llego al metodo ValidateUser de mi proveedor de autenticacion y me aparece un errror que me dice que le estoy pasando una contraseña nula. Mi base de datos es Oracle. 

    alguna idea ? realmente no se porque me pasa esto

    ORA-01005: se ha proporcionado una contraseña nula; conexión denegada
    Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código. 
    
    Detalles de la excepción: Oracle.ManagedDataAccess.Client.OracleException: ORA-01005: se ha proporcionado una contraseña nula; conexión denegada
    
    Error de código fuente: 
    
    
    Línea 54:             {
    Línea 55:                 var pass = l_csCrypto.Encrypt(csCriptografia.Key_Encrypt_Decrypt, CLAVE_USUARIO);
    Línea 56:                 return db.USUARIO.Any(o => o.CLAVE_USUARIO == CLAVE_USUARIO && o.NOMBRE_USUARIO == NOMBRE_USUARIO);
    Línea 57:             }
    Línea 58:         }
    

    martes, 27 de marzo de 2018 17:26