> Manuales > Sistema de autentificación en ASP

Realizamos una mejora al sistema de autentificación con ASP para que puedan acceder múltiples usuarios, cada uno con unos datos de acceso distintos.

Vamos a ver las páginas ASP que necesitaríamos para realizar un acceso restringido por clave y contraseña para múltiples usuarios, donde cada uno tenga unos datos de acceso propios.

Nota:Este artículo viene a complementar el manual Sistema Autentificación en ASP. De hecho, en este artículo sólo vamos a tratar la página que recoge los datos del usuario (su nombre y contraseña) y comprueba si son correctos, redireccionando a la aplicación segura (si los datos se corresponden con algún usuario de la base de datos), o a la página de entrada (si los datos no correspondían con ningún usuario registrado).

Lo primero es recordar el esquema de páginas del sistema de autentificación propuesto. Lo podemos ver en el artículo Funcionamiento del sistema de autentificación en ASP. Nosotros vamos a tratar de colocar aquí un código para la página "compruebo datos"

La base de datos

La base de datos que vamos a utilizar contendrá una tabla para los usuarios, donde cada uno dispondrá, al menos, de dos campos: un nombre de usuario y una contraseña, los dos de tipo texto.

Tabla usuario
Nombre del campo Tipo del campo
nombre_usuario Texto
clave_usuario Texto

En una base de datos de usuarios, el nombre de usuario debería ser un valor único, irrepetible para otro usuario, es decir, no podremos tener dos usuarios con el mismo nombre. Por esta razón, el campo nombre_usuario podría ser la clave principal de la tabla, aunque también podríamos haber creado un campo adicional, llamado por ejemplo id_usuario, de tipo autonimérico y colocarlo como clave principal.

Para conseguir no insertar dos usuarios con el mismo nombre de usuario, a la hora de insertarlos en la tabla, comprobaremos que no haya ningún usuario ya introducido con el nombre de usuario que se pretende insertar. Este paso, aunque importante, no lo vamos a ver, pues sólo nos vamos a centrar en decidir si un usuario puede entrar o no en la aplicación, suponiendo que los usuarios se encuentran ya insertados en la base de datos.

En el ejemplo suponemos que utilizamos una base de datos Access, sin embargo, cualquier tipo de base de datos podrá servir para unos objetivos como los que nos proponemos. Para sistemas Microsoft, las bases de datos más habituales son la mencionada Access (recomendable si el sitio web tiene pocas consutas al mismo tiempo) y SQL Server, que ofrece potencia suficiente para los entornos más exigentes.

Referencia: En nuestro Manual de ASP hablamos con más detenimiento sobre el trabajo con bases de datos.

El funcionamiento del script

El script que se utilizará para decidir si un usuario puede o no entrar en la aplicación es muy sencillo. Simplemente hace una llamada a la base de datos para comprobar si los datos de autentificación escritos por el visitante (usuario y contraseña) corresponden con los de algún usuario. En caso de que así sea, se permite la entrada y de no ser así, se deniega.

Nota: Este script fue comentado en una versión simplificada en el artículo Control de los datos de autentificación en ASP, englobado dentro del manual Sistema de autentificación PHP

Lo primero sería abrir una conexión con la base de datos, seleccionar la base con la que hemos de trabajar y ejecutar una sentencia de selección del usuario que corresponda con los datos de autentificación introducidos.

' miro a ver si la autentificacione es correcta
'creo una sentencia SQL con los datos recibidos
ssql = "select * from usuarios_autentificacion where nombre_usuario='" & request.form("usuario") & "' and clave_usuario='" & request.form("contrasena") & "'"
'conecto y extraigo de la base de datos
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "base_autentificacion"
set RS = Conn.Execute(sSQL)


Si esa sentencia SELECT responde con algún registro encontrado, sabremos que existe un usuario donde sus datos de autentificación corresponden perfectamente con los introducidos. En ese caso podremos realizar las acciones encaminadas a permitir el acceso. Por el contrario, si la sentencia SELECT no encuentra ningún registro, sabremos que no existe un usuario con los datos de autentificación introducidos y por lo tanto, deberemos realizar las acciones encaminadas a restringir el acceso.

if (not RS.eof) then
    'Como se ha localizado un registro es que ese usuario existe y su contraseña es correcta
    'coloco las variables de sesion
    session("autentificado") = "si"
    'redirecciono a la página de la aplicación
    response.redirect "aplicacion.asp"
else
    response.redirect "index.asp?errorusuario=si"
end if

'cierro la conexion con base de datos
Conn.Close


Nota importante: Este código es mejorable y en concreto tiene problemas de seguridad por permitir la Inyección SQL, por favor, lee los comentarios de la comunidad y verás las soluciones propuestas para mejorarlo. Gracias.

Las acciones para restringir o permitir el acceso son exatamente iguales a las que veníamos utilizando en el script de control sin utilizar la base de datos. Así que no vamos a comentarlas más, sino que os referimos al artículo donde las explicamos.

El código completo del ejemplo sería el siguiente.

<%
' miro a ver si la autentificacione es correcta
'creo una sentencia SQL con los datos recibidos
ssql = "select * from usuarios_autentificacion where nombre_usuario='" & request.form("usuario") & "' and clave_usuario='" & request.form("contrasena") & "'"
'conecto y extraigo de la base de datos
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "base_autentificacion"
set RS = Conn.Execute(sSQL)

if (not RS.eof) then
    'Como se ha localizado un registro es que ese usuario existe y su contraseña es correcta
    'coloco las variables de sesion
    session("autentificado") = "si"
    'redirecciono a la página de la aplicación
    response.redirect "aplicacion.asp"
else
    response.redirect "index.asp?errorusuario=si"
end if

'cierro la conexion con base de datos
Conn.Close
%>


Nota: Es importante destacar que esta página no debería contener ningún tipo de texto antes de la apertura de código ASP, ni tan siquiera saltos de línea. Esto es debido a que al final se realiza una redirección y este tipo de instrucciones solamente se puede ejecutar si no se ha escrito todavía ningún carácter en el cuerpo.

No obstante, en la mayoría de las versiones de ASP no encontraremos ese error porque la página no se envía al navegador hasta que no se termina de ejecutar en el servidor, y así, si se hace un redirect habiendo escrito texto antes, no se llegaría a mandar ningún texto sino que se mandaría la orden de redirección.

Todo esto está contado con más detalle en el artículo Redirigir al navegador a una URL con ASP al detalle.

Se puede descargar este sistema de autentificación, junto con la base de datos utilizada, en un fichero comprimido. No obstante, recordar que para ponerlo en marcha no basta solo con descomprimirlo, sino que habrá que colocarlo en el directorio de publicación de nuestro servidor web preparado para ASP y crear el DSN de la base de datos en el panel de control del servidor. Todo esto se explica con detalle en nuestro Manual de ASP.

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online Escu...

Manual