Diferencia entre revisiones de «Grupo Autenticación (2014-15)»

De Wiki de EGC
Saltar a: navegación, buscar
(API)
(Actas)
Línea 193: Línea 193:
 
* [[Acta de cambios en el equipo de trabajo (Autenticación 2014-15)|Acta de cambios en el equipo de trabajo (19/11/2014)]]
 
* [[Acta de cambios en el equipo de trabajo (Autenticación 2014-15)|Acta de cambios en el equipo de trabajo (19/11/2014)]]
 
* [[Acta de discusión sobre políticas de depuración | Acta de discusión sobre políticas de depuración (11/12/2014)]]
 
* [[Acta de discusión sobre políticas de depuración | Acta de discusión sobre políticas de depuración (11/12/2014)]]
 +
* [[Acta de discusión sobre integración | Acta de discusión sobre políticas de integración (17/12/2014)]]

Revisión del 23:24 18 dic 2014

Definición

Un subsistema de AGORA@US para autenticar usuarios y controlar quién puede votar y quién ya ha votado para evitar multiples votos de la misma persona. Este sistema tiene que ofrecer una API clara y sencilla para que otras partes del sistema puedan usarlo. Un sistema básico podría ser uno basado en un censo cerrado usando como identificador el correo electrónico. El sistema de autenticación tiene que ofrecer métodos para:

  • Realizar una prueba de verificación de identidad
  • Autenticar usuarios
  • Registrar usuarios

Miembros

Interfaz del sistema

El sistema de autenticación se encargará de realizar la autenticación del usuario antes de que este acceda al resto de la aplicación. Para que quede constancia de su estado como autenticado, se almacenarán en su navegador 2 cookies:

  • Una con identificador "user", en la que se almacenará el nombre de usuario autenticado.
  • Una con identificador "token", en la que se almacenará un token generado a partir de su nombre de usuario y contraseña.

Siempre que se desee comprobar que el usuario accediendo a una funcionalidad está correctamente autenticado, se debe comprobar que el token almacenado en la cookie es el correcto. Para ello se ofrecen métodos en la API descrita a continuación:

API

Las peticiones tendrán el siguiente formato, siendo todas de tipo GET:

   http://[host]/auth/api/[recurso]?param1=value1&param2=value2...

[host] hace referencia al host en el que se encuentre el sistema (localhost)

[recurso] hace referencia al nombre del recurso de la API.

Están disponibles los siguientes:

Recurso Descripción Parámetros Respuesta Ejemplo de respuesta
getUser Obtiene un usuario del sistema, incluyendo sus datos. Este método solo puede ser usado por subsistemas locales (acceso mediante localhost).
  • user: nombre del usuario
JSON con el usuario pedido. Los datos del usuario son los siguientes: "username", "password" y "email", "genre" y "autonomous_community".
   {
       "username" : "johndoe",
       "password" : "foo_bar",
       "email" : "mail@example.com",
       "genre" : "Masculino",
       "autonomous_community" : "Madrid",
       "age" : "18"
   }
getUsers Obtiene todos los usuarios del sistema, incluyendo sus datos. Este método solo puede ser usado por subsistemas locales (acceso mediante localhost). JSON con un array con los datos de cada usuario. Los datos de cada usuario son los siguientes: "username", "password" y "email", "genre" y "autonomous_community".
   [{
       "username" : "johndoe",
       "password" : "foo_bar",
       "email" : "mail@example.com",
       "genre" : "Masculino",
       "autonomous_community" : "Madrid",
       "age" : "18"
   },
   {
       "username" : "Marta",
       "password" : "12345",
       "email" : "mail2@example.com",
       "genre" : "Femenino",
       "autonomous_community" : "Madrid",
       "age" : "26"
   }]
checkToken Comprueba si un token es válido. Para ello, se obtiene el usuario correspondiente al token (indicado al comienzo del token), se genera el token del usuario y se comprueba si es igual que el pasado como parámetro.
  • token: token a validar.
JSON con el campo "valid" indicando la validez del token (true/false).
   {
       "valid"=true
   }
checkTokenUser Comprueba si un token es válido para un usuario. Para ello, se obtiene el usuario pasado como parámetro, se genera el token del usuario y se comprueba si es igual que el pasado como parámetro.
  • user: nombre del usuario cuyo token se va a comprobar.
  • token: token a validar.
JSON con el campo "valid" indicando la validez del token (true/false).
   {
       "valid"=true
   }

Si en una petición no se pasan unos parámetros correctos (métodos que no existen o falta de parámetros necesarios) se devolverá un error de código 400 con el siguiente mensaje:

   Bad Request. This method doesn't exist or the necessary paramenters weren't provided

Instalación del subsistema

Se está trabajando en una máquina virtual que disponga de las 3 plataformas usadas por los equipos: XAMPP, Django y Spring MVC.

Mientras tanto, para la instalación del sistema los pasos a seguir son los siguientes:

  1. Instalar XAMPP con los módulos Apache y MySQL (que vienen instalados por defecto). La instalación es trivial en Windows, Linux y OS X. Se puede obtener aquí.
  2. Borrar el contenido de la carpeta de proyectos. Habitualmente es C:/xampp/hdtocs.
  3. Introducir en la carpeta de proyectos una carpeta auth con el contenido de la carpeta auth que se encuentra en el repositorio compartido.
  4. Si se van a instalar otros subsistemas en la misma máquina, saltar este paso: Con Apache y MySQL activados (en el Control Panel de XAMPP) entrar en localhost/phpmyadmin y crear un usuario llamado 'usuario' con la contraseña 'password'. Crear una base de datos con el nombre 'egcdb' y dar todos los privilegios al usuario creado anteriormente.
  5. Suponiendo que ya se encuentre en la base de datos un usuario llamado 'usuario', con una contraseña 'password', no será necesario (ni posible) iniciar MySQL desde XAMPP.

Subsistemas relacionados

  • Cabina de votación: Deberá comprobar que sus usuarios estén logueados en la aplicación.
  • Creación/administración de votaciones: Deberá comprobar que sus usuarios estén logueados en la aplicación.
  • Deliberaciones: Deberá comprobar que sus usuarios estén logueados en la aplicación.

Guía de integración

En esta sección se detalla una guía de cómo integrar nuestro subsistema con los relacionados. En principio está dirigida a los miembros de nuestro grupo, pero puede ser usada por cualquier persona que tenga la máquina virtual que usamos nosotros. La máquina tiene los proyectos necesarios importados en eclipse y funcionando. Además, en el escritorio hay un WAR de cada aplicación, actualizado a la última versión de cada aplicación disponible el día 14/12/2014. En la máquina actual se encuentran los tres subsistemas desplegados pero, actualmente eso da un error de memoria, y mientras el error no se solucione, habrá que realizar el primer paso.

  • 1. Encender la máquina y, antes de iniciar nada, ir a C:\Program Files\Apache Software Foundations\Tomcat 7.0\webapps y borrar todo menos la carpeta manager.
  • 2. Localizar la carpeta logs, que está junto a webapps y tener lozalizado el log cuyo nombre comienza por "catalina", porque ahí es donde se refleja el error de memoria.
  • 3. Iniciar el servicio de apache con el icono que hay en la BARRA DE TAREAS, pues ese tiene las opciones necesarias que se suponen que mitigan la aparición del error de memoria.
  • 4. Iniciar el servicio de apache de xampp, que se ejecutará en el puerto 80 y es el que usa nuestra aplicación. Para iniciar éste, se accede al panel de control de xampp desde inicio y se le da a Start.
  • 5. Acceder al gestor de aplicaciones de Tomcat con la url localhost:8080/manager. Los datos de conexión son:
    • usuario: admin
    • contraseña: T0mC@t=Adm1n1$trat0R
  • 6. Desplegar las aplicaciones una por una usando los archivos .war que se encuentran en el escritorio. Mientras no haya solución, antes de desplegar la siguiente, eliminar la que ya está desplegada mediante el botón "Replegar". Se proponen las siguientes trayectorias para cada apicación:
    • Creación y administración de censos: /ADMCensus
    • Creación y administración de votaciones: /ADMVotes
    • Deliberaciones: /Deliberations
  • 7. Para probar que se ha integrado correctamente con cada subsistema, realizar lo siguiente:
    • Deliberaciones: se accede a la ruta de la aplicación y se selecciona la opción Login from authenticate. En el formulario que aparece, introducir el nombre de usuario en el primer campo user y la contraseña en el segundo campo user. Si muestra acciones disponibles en el menú superior con el nombre de usuario introducido, se ha identificado y, por lo tanto, integrado correctamente.
    • Creación y administración de censos: se accede a la aplicación de autenticación, la cual se encuentra en localhost/auth, se introducen los datos de conexión y se envían. Si el login es correcto, deberá redirigir a la aplicación de creación y administración de censos y, al seleccionar las distintas opciones del menú no saldrá una página con el texto Panic. Si el resultado es lo esperado, significa que la integración se ha realizado con éxito.
    • Creación y administración de votaciones: se accede a la aplicación y, si en la pantalla principal no se muestra opción alguna, sino solo texto, se deberá acceder a la aplicación de autenticación en localhost/auth, identificarse y volver a acceder a la aplicación de creación y administración de votaciones. Si muestra opciones en la pantalla principal (si no es el caso, probar a refrescar la página con Ctrl+F5), la primera parte de la integración será correcta. Ahora se deberá acceder a la pantalla de creación de votaciones, introducir datos correctos y pulsar Enviar. La aplicación no hará nada, pero se deberá comprobar que se ha creado la votación mediante cualquiera de los siguientes métodos:
      • Volviendo a la pantalla principal de la aplicación y eligiendo la opción Listar. Si aparece la aplicación, la intengración será correcta.
      • Iniciando una consola de comandos y, estando en el directorio C:\Program Files\MySql\MySql Server 5.5\bin, escribir myslq -uroot -pV3rY=$tR0nG=P@$$w0rd$. Una vez identificados correctamente en el servidor de bases de datos, escribir el comando use creacionadminvotaciones; (no olvidar el ; final). Cuando se esté usando la base de datos ejecutar la consulta SELECT * FROM SURVEY; y comprobar que la votación se ha creado en la base de datos. Si es así, la integración es correcta.

Repositorio de código

Actualmente, el repositorio en el que se encuentra nuestro código es el repositorio compartido con los demas subsistemas. Una versión estable se puede encontrar en la carpeta auth de la rama master, y una versión más actualizada en la misma carpeta, en la rama auth. El resto de ramas auth_* son ramas de desarrollo.

Antes de que existiera un repositorio común, usamos este repositorio repositorio del Grupo de Autenticación.

Gestión de la comunicación

Toda la comunicación se lleva a cabo presencialmente en horario de clase, y de forma remota mediante el uso de herramientas de mensajería instantánea (Telegram).

El diario de grupo se mantiene en esta wiki, y las actas se van publicando como páginas individuales dentro del diario de grupo.

Iteraciones

Son susceptibles de entrar en esta categoría aquellos trabajos en clase que tengan un entregable. Para ver las actas de otros entregables, ver el diario de grupo.

Diario de grupo

Hojas de tiempo

Debido a que la hoja de tiempos del grupo empezaba a tener una longitud casi mayor que el resto del diario del grupo, hemos decidido pasarla a una página independiente. La hoja de tiempos está aquí: Hoja de tiempos

Actas