Plantilla:PHP/inaem2017/Autentificacion

Qué es autentificarse
https://www.tractis.com/login
 * Por autentificarse vamos a entender un mecanismo por el cual el servidor web puede estar relativamente confiado en que está siendo consultado por una determinada máquina y/o persona.
 * Por ejemplo podemos visitar esta página y ver diferentes modos en los que piden autentificarse
 * Modos de autentificarse
 * 1) Contraseña y usuario
 * 2) Almacenar el usuario en sesión (Lo veremos más adelante)
 * 3) Dni digital
 * 4) Certificados digitales de usuario
 * 5) Autentificación basada en Tokens
 * 6) Usando el protocolo Auth 2.0 (Lo veremos en app híbridas usando el protocolo Auth 2.0)
 * 7) Usando JSON Web Token (JWT) http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html


 * Seguro que hay mas sistemas y seguro que muy interesantes, pero estos son algunos de ellos
 * Ahora vamos a ver cómo podemos autentificarnos sin más que usar apache
 * En la última unidad funcional, cuando veamos servicios web, usaremos otro sistema como google, igualmente se podría usar la cuenta de facebook o twiter para identificarte, en la relación anterior hay algún enlace por si es de tu interés.

La responsabilidad de exigir una clave de acceso puede recaer sobre el servidor web con los módulos de seguridad Respecto a estos conceptos vamos a trabajar este tema que es el primero de tres aspectos de este tema
 * En este caso restringimos el acceso a la página o sitio web
 * Otra opción habitual es tener un sitio con cierto contenido y en el sitio dar la posibilidad de identificarse / registrarse.
 * A usuarios identificados se les ofrece otro contenido diferente.

Protocolo http vs https
Este es un concepto importante, diferenciar en contenidos que se envíen de forma segura (usar cifrado en el envío que es lo que se hace con https) y en el hecho que para acceder a un sitio tengan un nivel de seguridad que implique que de alguna manera te tengas que autentificar.

La seguridad del envío de datos es otro aspecto diferente del tema de la autentificación.

En seguridad entre otros aspectos tenemos:

center|400px
 * 1) La autentificación mecanismos por los cuales podemos confiar en que quien se ha identificado es conocido para el sistema.
 * 2) La confidencialidad son mecanismos con los que podemos confiar en que nadie puede ver el contenidio de la información ni modificarla durante la transmisión.

Ambos mecanismos debería de trabajar conjuntamente. Por ejemplo si yo envío una contraseña para identificarse, pero con un sniffer, alguien la puede capturar y ver en claro, no conseguimos nada de seguridad.


 * Para la transmisión segura se emplea el protocolo https.
 * Este tema se estudia en el módulo de despliegue de aplicaciones web.

Autentificación por el servidor web

 * Es el propio servidor http quien nos ofrece este método de autentificación.
 * Este tema se ve dentro del módulo de despliegue de aplicaciones web, no obstante aquí nos va a interesar, cómo podemos hacer que sea el servidor el que solicite las credenciales y recoja los datos aportados, y cómo desde php podemos ver esos valores o datos y gestionarlos en nuestro programa.
 * Recordamos el mecanismo de autentificación que usa apache.


 * 1) Definir los usuarios con acceso permitido
 * 2) Se puede indicar a qué recursos tiene acceso el usuario en concreto (me refiero a qué páginas).
 * 3) Generar en cabecera http un código http 401 que es un código de acceso restringido. Este código hace que el usuario reciba un formulario para aportar sus credendiales
 * 4) El navegador al recibir ese código solicitando credenciales
 * 5) El servidor recibe estas credenciales y las almacena en sus variables superglobales para futuras solicitudes

Crear la lista de usuarios
Imagen:listaUsuarios.png http://httpd.apache.org/docs/2.4/es/howto/auth.html sudo apt-get install apache2-utils
 * Usamos la herramienta htpasswd para crear un fichero con los usuarios y sus contraseñas
 * En caso de no tener la herramienta instalada debemos hacer la instalación de las herramientas o utilidades de apache escribiendo
 * Este comando tiene una serie de opciones que podemos ver en línea de comandos sin mas que escribir su nombre.
 * Es importante la opción -c para crear el fichero. Recuerda usarla sólo la primera vez; cuando la usas se crea el fichero, y si ya existiera se elimina el contenido del fichero y se crea de nuevo.
 * Para incorporar nuevos usuarios se escribe sin opción y se añade el nombre de los usuario
 * Por seguridad es importante añadir el fichero en una ubicación fuera del directorio documentRoot del servidor web.

Indicar los recursos restringidos : .htaccess
http://www.bdat.net/documentos/apache/x367.html Y la oficial (siempre la mejor). http://httpd.apache.org/docs/2.4/es/mod/core.html#allowoverride Imagen:htaccess.png
 * Para este cometido, apache nos permite usar el famoso fichero .htaccess que a continuación vamos a explicar.
 * Para habilitar el uso de este fichero debemos indicarle al servidor web que vamos a utilizarlo. Esto se especifica en la directiva AllowOverride
 * Para más información ver
 * En nuestro caso tenemos que poner el valor AuthConfig o bien All
 * Una vez que hemos hecho esto, cada vez que vaya a coger un fichero de un determinado directorio, antes de entregarlo, verificará que si existe un fichero .htaccess en ese directorio, en cuyo caso pedirá credenciales.
 * Para indicar los recursos restringidos usaremos las siguientes directivas (Este será el contenido del fichero .htaccess
 * AuthName      Nombre de dominio de la authentificación
 * AuthType      Tipo de autentificación, pudiendo ser  Basic y más segura Dijest
 * AuthUserFile  Ruta del fichero de los usuarios con permiso'
 * Require       valid-user o usuarios concretos de la lista que sí que tendrán acceso al recursos si se acreditan correctamente.