[MÚSICA]
En las lecciones anteriores,
hemos visto varios tipos diferentes de esquemas de autenticación.
Comenzamos con la autenticación básica, luego analizamos cómo podemos usar las cookies para
realizar la autenticación, e incluso las cookies firmadas
, y luego analizamos la autenticación basada en sesión.
Donde el servidor está realizando un seguimiento de la información sobre cada cliente, y
luego la cookie se utilizará como una forma de indexar en la
base de datos del lado del servidor para extraer información adicional, para validar al usuario.
Ahora, las cookies y las autenticaciones basadas en sesión no son escalables,
porque allí el servidor necesita realizar un seguimiento de todos los diferentes usuarios.
Aunque, esto se hace fuera del protocolo HTTP en sí, pero
aún así el hecho de que necesita realizar un seguimiento
de toda la información de sección del sitio del servidor, lo hace no muy escalable.
Así que aquí es donde la autenticación basada en tokens ha
demostrado ser muy útil.
veremos la autenticación base de tokens un poco más detallada en esta conferencia y el
ejercicio que sigue.
Una vez más, revisar rápidamente las cookies y la autenticación basada en sesión.
Con la autenticación basada en cookies,
notamos que las cookies se almacenan en el lado del cliente, y las cookies se incluyen
en cada mensaje de solicitud saliente, por lo que, al servidor se le recuerda acerca de
ese cliente específico, mediante la extracción de información de la cookie. La
cookie se puede usar junto con las sesiones, por las que las cookies almacenan el ID de sesión
y, a continuación, cuando el servidor recibe la solicitud entrante de la cookie,
extrae el ID de sesión y lo utiliza como índice en el
almacén de sesión del lado del servidor para recuperar la información de sesión para el cliente en particular.
Ahora, este enfoque, como dije,
no es muy escalable porque si tiene miles de sesiones, el servidor necesita realizar
un seguimiento de todas estas miles de sesiones en el lado del servidor.
Aunque se hace independiente de HTTP en un almacén,
ya sea un almacén de archivos o una base de datos.
Pero aún así,
el hecho de que necesite realizar un seguimiento de toda esta información hace que no sea escalable.
Entonces, de nuevo, para recordarle una vez más,
¿por qué hablamos de autenticación basada en tokens?
La autenticación basada en sesión, como hemos visto anteriormente, funciona perfectamente bien para
aplicaciones web y puede ocuparse fácilmente de la autenticación del usuario.
Pero entonces, la autenticación basada en sesión, mientras que es el principio de
servidores sin estado y también conduce a problemas de escalabilidad.
El segundo problema es que las aplicaciones móviles no
manejan muy bien las autenticaciones basadas en sesiones.
Del mismo modo, las aplicaciones móviles tienen dificultades para tratar con cookies.
Por lo tanto, en tales circunstancias en las que su servidor está sirviendo datos
tanto para una aplicación web como para una aplicación móvil.
Entonces, la autenticación basada en sesión no será muy útil, y
aquí es donde la autenticación basada en token se vuelve mucho más fácil de usar.
En una autenticación basada en token como el nombre en su lugar,
el servidor emitirá un token a un usuario validado, y todas las
solicitudes posteriores que provengan del lado del cliente, llevarán el token en la solicitud misma.
Ya sea en forma de encabezado de solicitud o en el cuerpo del mensaje de solicitud.
Además, la autenticación basada en tokens también nos ayuda a
lidiar con lo que se llaman problemas CORS o CSRF.
Problemas de intercambio de recursos de origen cruzado y así
sucesivamente, hablaré brevemente sobre el costo en el siguiente módulo.
Pero por el momento, la autenticación basada en tokens aborda algunos de
los problemas que se encuentran con los automóviles y los problemas relacionados con la falsificación de solicitudes entre sitios.
No solo eso, la autenticación basada en tokens es mucho más fácil para
una aplicación compartir su autenticación con otra aplicación.
Por supuesto, todo esto se hace de manera segura.
Pero, con la autenticación basada en sesión, eso no es sencillo.
¿ Cómo funciona la autenticación basada en tokens?
En la autenticación basada en tokens,
el usuario primero necesita validarse a sí mismo en el lado del servidor.
Ahora, esta validación podría tomar las formas que hemos visto antes.
Así que podemos usar una validación local usando nombre de usuario y contraseña.
O incluso podemos usar la validación de terceros usando
tecnologías como, oauth u oauth 2.0 o open ID.
Hablaremos brevemente sobre oauth y oauth 2.0 en el siguiente módulo.
Pero, independientemente de la forma en que el usuario se autentique, una vez que el usuario
se autentica, inmediatamente después, su servidor puede simplemente emitir un token al usuario.
Y toda la comunicación posterior entre el usuario y
el servidor, se puede hacer simplemente usando este token.
JSON Web Token del que hablaremos, es uno de esos
esquemas de autenticación basados en tokens, y hay servidor cuando crea este token, creará un token firmado.
Usar un secreto en el sitio del servidor que solo el servidor conoce.
Por lo tanto, incluso si un tercero en hacia y entre y
trata de manipular el token, incluso si captura el token e
intenta manipular el token, el token se volverá inválido.
Y entonces, esa forma de proteger al usuario es
fácilmente factible, todas las solicitudes posteriores
del lado del cliente deben llevar el token en la solicitud
, ya sea, como dije, en el encabezado o en el cuerpo del mensaje de solicitud.
Por lo tanto, cuando el servidor recibe este token, el servidor verificará el token,
para asegurarse de que este es un token válido, y luego si es un token válido,
el servidor responderá a la solicitud entrante.
Como mencioné, JSON Web Tokens es uno de esos esquemas de autenticación basados en tokens.
JSON Web Token, es una forma muy simple de codificar
información en un token y luego pasarla al sitio del cliente.
JSON Web Token en sí se basa en estándares,
esto se basa en el IETF RFC 7519.
IETF aquí, significa el Grupo de Trabajo de Ingeniería de Internet.
La organización que ordena todo acerca de cómo funciona Internet,
y se ocupa de los protocolos y las políticas, relacionadas con Internet.
El RFC, significa el documento de estándares,
en términos de IETF, RFC significa Request for Comments.
Y cada documento de tales normas lleva un número.
7519 en este caso se refiere al documento,
el documento estándar relacionado con JSON Web Token.
El Token Web JSON en sí es un token autónomo, lleva toda
la información dentro de sí mismo, que es necesaria para identificar al usuario.
No solo eso, un token web JSON se puede compartir entre dos aplicaciones.
Entonces, por ejemplo, una aplicación cuando se autentica y luego se apodera de
un JSON Web Token, puede pasar ese JSON Web Token a y en
esa aplicación, que está dispuesto a autorizar para acceder al servidor en su nombre.
Este intercambio del token se realiza de una manera muy segura,
así que no se preocupe demasiado por la seguridad allí.
Esto no es de una manera segura,
donde compartiendo el token entre una aplicación a otra.
Por lo tanto, la autorización se transfiere a una segunda aplicación, y
la segunda aplicación puede autorizar en nombre de la primera aplicación,
a comunicarse con el servidor.
Esto es factible con tokens.
Ahora, por supuesto, el ingeniero en usted obviamente se preguntará qué hay exactamente
dentro de un JSON Web Token, y ¿cómo es útil?
Un token web JSON, como dije, está codificado en una cadena larga y
esta cadena en sí puede interpretarse como que consta de tres partes.
La cadena en sí puede, o la cadena codificada contiene tres partes,
el encabezado, la carga útil y la firma.
Eso lleva suficiente información sobre cómo se codifica este token.
El encabezado en sí contiene el algoritmo específico que se utiliza para
codificar este token web JSON y el tipo del token en sí.
El algoritmo en este caso, sería HS256, que es un esquema de codificación de 256 bits,
que se utiliza para hash la información dentro del token.
Y en este caso, esto sucede que es el token web JSON, y por lo tanto
el campo de tipo se establecerá en JWT.
Y entonces esa es la información que se almacena en el encabezado de JSON Web Token.
La carga útil en sí, lleva información que le ayuda a identificar al usuario.
En el ejercicio que vamos a hacer,
la carga útil de horas sólo lleva el ID del usuario dentro de la carga útil.
No es necesaria ninguna otra información.
Este ID se puede utilizar en el lado del servidor,
para indexar en la base de datos de Mongo para recuperar la información completa del usuario si es necesario.
Por lo tanto, verá que codificaremos el ID y
luego lo almacenaremos en la carga útil de ese mensaje.
Puede almacenar información adicional en la carga útil del mensaje si lo desea.
Pero cuanta más información almacene allí,
mayor será el token web JSON correspondiente.
Por lo tanto, intente limitar la cantidad de información que almacenó en la carga útil
del token web JSON.
Como veremos en el ejercicio, tenemos un módulo de nodo que nos permite
codificar y crear un JSON Web Token,
basado en la información que queremos poner en la carga útil.
Ahora, cuando crea un token web JSON, también proporciona una firma.
Una clave secreta en el lado del servidor que se utiliza para codificar este token web JSON,
y ese secreto también se incluye en la parte de firma del token web JSON.
La firma en sí se incluye de tal manera que
hay unos conceptos básicos antes de la cabecera codificada y la carga útil,
que luego se codifica utilizando el secreto específico que es utilizado por el servidor.
Y esto codificado en, como dije el HMAC,
que nos hemos referido en una de las lecciones anteriores y
usando el hash de 256 bits, y que se incluye en la firma.
Por lo tanto, cuando este token web JSON se recibe en el lado del servidor, y
cuando el servidor decodifica este token, entonces el servidor puede verificar cruzada para
asegurarse de que este token web JSON no haya sido manipulado por nadie,
mientras el token se pasa entre el cliente y el sitio del servidor.
Por lo tanto, si sabe algo sobre seguridad, intrusos,
etc., entiende por qué es importante codificar el token y
verificar la autenticidad del token en el sitio del servidor.
Como mencioné, si necesita lidiar con JSON Web Tokens en su aplicación de nodo.
Hay un módulo de nodo específico llamado como el módulo de nodo jsonwebtoken.
Este módulo de nodo implementa los estándares relacionados con JSON Web Token, y
se puede incluir en su aplicación de nodo.
Este módulo en sí, proporciona un método llamado signo que le permite firmar y
emitir el token al cliente desde el lado del servidor.
También contiene un método de verificación.
Que se puede usar para verificar la autenticidad o
para garantizar la autenticidad del token web JSON entrante,
por lo que haremos uso del módulo de token web JSON, en nuestro ejercicio.
Junto con el módulo JSON Web Token,
también usamos el módulo Passport-JWT, módulo nodo.
Lo que proporciona las estrategias basadas en jwt para nuestro módulo de autenticación de pasaporte.
Por lo tanto, esto proporciona una estrategia de pasaporte para autenticarse usando JSON Web Token.
Por lo tanto, esto le permite autenticar el endpoint RESTful usando el JWT como el método para
dong la validación, sin requerir que el servidor use sesiones.
Ahora, el módulo de pasaporte JWT,
admite un método para incluso extraer el token JWT
del mensaje de solicitud entrante, e incluso verificar el token en su nombre.
El pasante del módulo Passport-JWT, utiliza el módulo JSON Web Token para
hacer la verificación de ese JSON Web Token.
El token en sí se puede llevar en el encabezado de la solicitud entrante,
en el encabezado, incluso en el encabezado de autenticación de la solicitud entrante,
que es lo que haremos en el ejercicio.
El token también se puede llevar en el cuerpo de la solicitud entrante, en cuyo caso,
tenemos que extraer el token del cuerpo de la solicitud entrante y
luego hacer uso de él.
El módulo Passport-JWT, soporta eso también si elige
usarlo como forma de pasar el token de vuelta del cliente al sitio del servidor.
El token web JSON, también se puede incluir en los parámetros de consulta URL si así lo
decide, y puede extraerse de allí b Passport-JWT y
utilizarse para la autenticación.
Ahora, con esta rápida comprensión de JSON Web Tokens y
cómo son útiles, pasaremos al ejercicio donde usaremos el módulo
Passport-JWT, junto con el módulo JSON Web Token,
y configuraremos nuestro servidor Express Rest API para usar JSON Web Tokens.
[ MÚSICA]