Usuario:ManuelRomero/php/autentificacion/concepto

Qué es autentificarse
https://www.tractis.com/login ... Respecto a estos conceptos vamos a trabajar este tema que es el primero de tres aspectos del tema 4
 * 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) Dni digital
 * 3) Certificados digitales de usuario
 * Nosotros en este tema usaremos el módo de contraseña y usuario. En dos temas posteriores, cuando veamos servicios web usaremos otro sistema como google, igualmente se podría usar la cuenta de facebook o twiter para identificarte.
 * La responsabilidad de exigir una clave de acceso puede recaer sobre el servidor web con los módulos de seguridad
 * En este caso restringimos el acceso a la página o sitio web
 * Otra opción habitual es tener un sitio con cierto contendo y en el sitio dar la posibilidad de identificarse / registrarse.
 * A usuarios identificados se les ofrece otro contendio diferente.

protocolo http vs https

 * Este es un concepto importante
 * La seguridad del envío de datos es otro aspecto diferente del tema de la autentificación
 * En seguridad entre otros aspectos tenemos
 * 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 contendio 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 coneseguimos 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.
 * Nosotros usaremos http sin cifrar, pero se insiste en que no es segura la transmisión, pues podría ser objetivo de espía informático.

Autentificación por el servidor web
imagen:autentificacionServidor.php Imagen:listaUsuarios.png http://httpd.apache.org/docs/2.4/es/howto/auth.html sudo apt-get install apache2-utils
 * Es el propio servidor http quien nos ofrece este método de autentifiación.
 * Seguramente este tema lo veáis en la parte de despliegue o sistemas, pero lo vamos a comentar
 * El mecanismo es sencillo.
 * 1) Definir los usarios con acceso permitido
 * 2) Se puede indicar a qué recursos tiene acceso el usuario en concreto
 * 3) Generar en cabecera http un código http 401 que es un código de acceso restringido
 * 4) El navegador al recibir ese código solicita credenciales
 * 5) El servidor recibe estas credenciales y las almacena en sus variables superglobales para futuras solicitudes
 * Crear la lista de usuarios
 * 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 escribiend
 * Este comando tiene una serie de opciones que podemos ver en línea de comandos sin mas que esciribr su nombre
 * importante es la opción -c para crear el fichero
 * Para incorporar nuevos usuarios se escribe sin opción y se añaden
 * Por seguridad es importante añadir el fichero en una ubicación fuera del servidor web.

cd /home/MiUsuario mkdir usuarios cd usuarios htpasswd -c misUsuarios maria htpasswd misUsuarios nieves htpasswd misUsuarios nieves
 * Primero nos ubicamos en el directorio donde queramos añadir o crear el fichero
 * MiUsuario es vuestro propio directorio
 * Ahora creamos un directorio para guardar esta información y nos movemos en él
 * Una vez correctamente ubicados generamos el fichero de las password con la herramienta htpasswd
 * La primera vez con opción -c para crear el fichero

http://www.bdat.net/documentos/apache/x367.html Y la oficial http://httpd.apache.org/docs/2.4/es/mod/core.html#allowoverride
 * Indicar los recursos restringidos
 * Para este cometiodo, 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 mas 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 recuros

PHP accediendo a información http

 * Desde el código de php podemos acceder a la información facilitada por el servidor php.
 * La matriz asociativa variable superglobal $_SERVER contiene esta información
 * Concretamente los índices
 * 1) PHP_AUTH_USER Es el nombre del usuario
 * 2) PHP_AUTH_PW Es la password del usuario
 * 3) AUTH_TYPE Es el tipo de seguridad utilizado

Usar función header para la autentifiación
http://es.php.net/manual/es/function.header.php
 * La referencia de la función header Sirve para crear cabeceras de la página solicitada
 * Vamos a usarla para unas acciones concretas
 * Modificar el texto de error
 * En este caso no vamos a usar el fichero .htaccess
 * Cuando accedemos a una página y no nos hemos identificado aparece un error 401
 * Vamos a solicitar una autentificación de tipo basic
 * Para ello especificamos la cabecera WWW-Authenticate
 * Ademas de especificar el modo de autentifación ponemos el mensaje que verá el usuario
 * Para no mostrar la página solicitada se envía un código 401, lo que provoca que se solicite un usuario y contraseña antes de visualizar el resto de la página.
 * El códgio quedaría
 * El código completo quedaría
 * Ahora debemos poder especificar cual va a ser el usuario esperado en esta página
 * Por ejemplo en la página anterior insertamos un usuario cualquiera y una password cualquiera entraremos ya que no comparamos con nadie
 * Verficar el usuario y contraseña
 * Con el siguiente código verificaríamos el usuario y contraseña usando el modo de header
 * Esto nos podría servir, puesto que el código no se envía al cliente, y él nunca podría ver la password, ni el usuario
 * No obstante, siempre será una opción más segura, y más versátil tener el usuario almacenado en una base de datos que ya veremos más adelante cuando veamos bases de datos