‫Instructor: Tenemos nuestro modelo de
‫usuario configurado listo para guardar usuarios con contraseñas seguras.
‫Y a continuación, realmente implementaremos
‫la autenticación y autorización de usuarios.
‫Entonces, en términos simples, todo el flujo de
‫trabajo de iniciar sesión a los
‫usuarios y permitirles interactuar con ciertos recursos protegidos a
‫los que los usuarios no registrados no pueden acceder.
‫Ahora hay muchos métodos de autenticación,
‫pero el que usaremos es un enfoque muy
‫moderno, simple y seguro llamado Json Web Tokens o JWT para abreviar.
‫Por lo tanto, los tokens web de Json son una solución
‫sin estado para la autenticación.
‫Por lo tanto, no es necesario almacenar ningún estado de sesión en
‫el servidor, lo que, por supuesto, es perfecto para API tranquilas como la
‫que estamos construyendo.
‫Porque recuerde, las API de descanso siempre deben ser sin estado.
‫Y la alternativa más utilizada a la autenticación con
‫JWT es simplemente almacenar el estado de inicio de sesión del
‫usuario en el servidor mediante sesiones.
‫Pero, por supuesto, no sigue el principio
‫que dice que las API tranquilas deben ser apátridas y es
‫por eso que estamos optando por una solución como los JWT.
‫Así que ahora echemos un vistazo a cómo funciona realmente
‫la autenticación con los tokens web de Json.
‫Y asumiendo que ya tenemos un usuario registrado en nuestra
‫base de datos, así es como un usuario inicia sesión en la aplicación.
‫Entonces, el cliente del usuario comienza haciendo una solicitud de
‫publicación con el nombre de usuario o correo electrónico y la contraseña.
‫La aplicación luego verifica si el usuario existe y
‫si la contraseña es correcta.
‫Y si es así, se crea un Json
‫Web Token exclusivo para ese usuario utilizando una cadena secreta
‫que se almacena en un servidor.
‫Y un JWT en sí mismo es en realidad solo una
‫cadena que se parece a esto.
‫Pero hablaremos más sobre el propio JWT en
‫la siguiente diapositiva.
‫De todos modos, el servidor envía ese JWT de vuelta al cliente, que
‫lo almacenará en una cookie o en el almacenamiento local.
‫Y así, el usuario se autentica y
‫básicamente inicia sesión en nuestra
‫aplicación sin dejar ningún estado en el servidor.
‫Por tanto, el servidor no sabe qué usuarios
‫han iniciado sesión.
‫Pero, por supuesto, el usuario sabe que ha
‫iniciado sesión porque tiene un Json Web Token válido, que es un
‫poco como un pasaporte para acceder a las partes protegidas de la aplicación.
‫Así que de nuevo, solo para asegurarnos de que entendiste la idea.
‫Un usuario inicia sesión tan pronto como recupera
‫su token web Json válido único que no se guarda en ningún
‫lugar del servidor.
‫Por tanto, este proceso es completamente apátrida.
‫Luego, cada vez que un usuario desea acceder a una ruta protegida, como los
‫datos de su perfil de usuario, por
‫ejemplo, envía su Json Web Token junto con una solicitud.
‫Entonces es un poco como mostrar su pasaporte para
‫acceder a esa ruta, ¿verdad?
‫Y esa es probablemente la mejor y más fácil forma de
‫entender toda esta idea.
‫Ahora, una vez que la solicitud llega al
‫servidor, nuestra aplicación verificará si el Json Web Token
‫es realmente válido.
‫Entonces, si el usuario es realmente quien dice ser.
‫Y más sobre cómo funciona este paso
‫un poco más adelante en este video.
‫Ahora bien, si el token es realmente válido,
‫entonces los datos solicitados se enviarán al cliente y, de lo
‫contrario, habrá un error que le indicará al usuario
‫que no tiene permiso para acceder a ese recurso.
‫Y mientras el usuario esté conectado,
‫así es como funcionará cada vez que solicite datos
‫de cualquier ruta protegida.
‫Ahora, lo que es muy importante
‫tener en cuenta aquí es que toda esta comunicación debe ocurrir a través de https.
‫HTTP cifrado tan seguro para evitar que cualquier
‫persona pueda acceder a contraseñas o tokens web Json.
‫Solo entonces tendremos un sistema realmente seguro.
‫Pero hablaremos de eso más adelante en la sección, está bien.
‫Entonces sé que esto puede parecer bastante
‫confuso al principio cuando
‫intentas entenderlo por primera vez,
‫pero en realidad el principio en sí es bastante simple, ¿de acuerdo?
‫Y esto es realmente todo
‫lo que necesita saber para poder implementar la autenticación mediante JWT.
‫Pero ahora profundicemos un poco
‫más en cómo funciona realmente el JWT.
‫Entonces, un Json Web Token parece la parte izquierda de esta captura de pantalla que
‫fue tomada del depurador JWT en jwt. io.
‫Básicamente, es una cadena de codificación compuesta
‫de tres partes.
‫El encabezado, la carga útil y la firma.
‫Ahora, el encabezado es solo algunos metadatos sobre el token en
‫sí y la carga útil son los datos
‫que podemos codificar en el token, cualquier dato que realmente queramos.
‫Entonces, cuantos más datos queramos codificar
‫aquí, mayor será el JWT.
‫De todos modos, estas dos partes son solo
‫texto sin formato que se codificará, pero no se cifrará.
‫Entonces cualquiera podrá decodificarlos y leerlos.
‫Por lo tanto, no podemos almacenar ningún dato sensible aquí.
‫Pero eso no es un
‫problema en absoluto porque en la tercera parte, así que en
‫la firma, es donde las cosas se ponen realmente interesantes.
‫La firma se crea utilizando el encabezado, la carga útil y
‫el secreto que se guarda en el servidor.
‫¿Recuérdalo?
‫Y todo este proceso
‫se llama firmar el Json Web Token.
‫Entonces, nuevamente, el algoritmo de firma toma el
‫encabezado, la carga útil y el secreto para crear una firma única.
‫Entonces, solo estos datos más el
‫secreto pueden crear esta firma, ¿de acuerdo?
‫Luego, junto con el encabezado y la
‫carga útil, estas firmas forman el JWT,
‫que luego se envía al cliente.
‫Ahora, como mencioné brevemente, justo en la primera
‫diapositiva, una vez que el servidor recibe un JWT para
‫otorgar acceso a una ruta protegida, necesita verificarlo
‫para determinar si el usuario realmente
‫es quien dice ser, ¿verdad?
‫En otras palabras, verificará si nadie cambió el encabezado y
‫los datos de carga útil del token.
‫Entonces, nuevamente, este paso de verificación verificará si
‫ningún tercero realmente alteró el encabezado o la
‫carga útil del Json Web Token.
‫Entonces, ¿cómo funciona realmente esta verificación?
‫Bueno, en realidad es bastante sencillo.
‫Entonces, una vez que se recibe el JWT,
‫la verificación tomará su encabezado y carga útil y,
‫junto con el secreto que aún
‫está guardado en el servidor, básicamente creará una firma de prueba.
‫Pero la firma original que se generó
‫cuando se creó por primera vez el JWT todavía está en el token, ¿verdad?
‫Y esa es la clave para esta verificación.
‫Porque ahora todo lo que tenemos que
‫hacer es comparar la firma de prueba con la firma original.
‫Y si la firma de prueba
‫es la misma que la firma original, entonces significa que la
‫carga útil y el encabezado no se han modificado, ¿verdad?
‫Porque si se hubieran modificado,
‫la firma de prueba tendría que ser diferente.
‫Por lo tanto, en este caso en el que
‫no ha habido alteración de los datos, podemos autenticar al usuario.
‫Y, por supuesto, si
‫las dos firmas son realmente diferentes, bueno,
‫entonces significa que alguien manipuló los datos.
‫Por lo general, al intentar cambiar la carga útil.
‫Pero ese tercero que manipula la carga útil,
‫por supuesto, no tiene acceso al secreto, por lo
‫que no puede firmar el JWT.
‫Por lo que la firma original nunca se corresponderá
‫con los datos manipulados.
‫Y por lo tanto, la verificación siempre fallará
‫en este caso.
‫Y esa es la clave para que todo este sistema funcione.
‫Es la magia lo que hace que JWT sea
‫tan simple, pero también extremadamente poderoso.
‫Permítanme resumirlo nuevamente.
‫Sin el secreto, nadie podrá manipular los datos
‫de JWT porque no pueden crear una
‫firma válida para los nuevos datos.
‫Quiero decir que podrían manipular los datos,
‫por supuesto, pero siempre fallará el paso de verificación.
‫Ahora, no se preocupe, no vamos a implementar
‫estos algoritmos JWT por nosotros mismos.
‫Son muy complejos y no vamos
‫a reinventar la rueda aquí, ¿de acuerdo?
‫Pero sigue siendo muy importante comprender realmente cómo funciona
‫todo este proceso detrás de escena.
‫Y espero que esta conferencia haya hecho precisamente eso por ti.
‫Pero ahora, pasemos a la siguiente lección para
‫comenzar a usar todo esto.