Gracias a los estándares de seguridad podemos compartir flujos de autorización y autenticación entre diferentes aplicaciones, es decir, podemos aprender el paso a paso de cómo funcionan estos servicios y aplicarlos para proteger nuestras aplicaciones y fortalecer nuestra ciberseguridad.
Vamos a analizar el stack de seguridad más utilizado en el mercado por aplicaciones modernas. Si quieres aprender a utilizarlos en proyectos 100% reales, puedes tomar el Curso de Autenticación con OAuth de Platzi y, de paso, revisar otros cursos en nuestra escuela de ciberseguridad.
Antes de analizar nuestras tecnologías debemos entender las diferencias entre Autenticación y Autorización. Así, podemos entender mucho mejor los objetivos de las tecnologías que vamos a implementar en nuestros proyectos.
Autenticación: Consiste en verificar la identidad de nuestros usuarios, debemos asegurarnos de que existen, a qué partes de nuestro sistema pueden y deberían ingresar, si tienen los permisos adecuados, entre otras cosas. Para este proceso podemos utilizar diferentes mecanismos: formularios de usuario y contraseña, mensajes de texto, envío de URLs por correo electrónico, entre otras.
Autorización: Consiste en definir los permisos y limitaciones de los usuarios que ya pasaron el proceso de autenticación. Esto mismo sucede con nuestras aplicaciones, algunos usuarios pueden tener permisos para escribir, actualizar o eliminar cierto contenido, mientras que otros solo pueden visualizar e interactuar con nuestra aplicación.
Los JSON Web Tokens(JWT) son un estándar que nos permite representar los permisos o requerimientos de las aplicaciones.
Nuestro servidor concede los permisos para un usuario generando y guardando esta información en tokens. Pero en vez de generar una cookie para almacenar los tokens, los enviamos al cliente o navegador de los usuarios para que el frontend se encargue de hacer peticiones a este o algún otro servidor.
Gracias a los JWT podemos hacer peticiones y recibir la información de los usuarios sin necesidad de verificar la identidad o permisos de los usuarios todo el tiempo. Por su puesto, estos tokens tienen un tiempo de vida limitado. Debemos configurar nuestra aplicación para solo entregar información de los usuarios cuando estos se han autenticado (el servidor a firmado un token especial para ellos) y el tiempo de vida del token todavía es vigente.
Estudia un poco sobre Autenticación con Firebase en 5 minutos.
Puedes leer un poco más sobre cómo funcionan los JWT en el siguiente artículo de @sergiodxa: Introducción a JSON Web Tokens (JWT) en Platzi.
OAuth (Open Authorization, versión 2.0) es un estándar o protocolo que nos permite delegar la autenticación de nuestros usuarios a otros servicios.
El flujo de autorización es el siguiente: Nuestra aplicación redirecciona a los usuarios para pedir permiso y acceder a parte de su información. Si los usuarios aceptan, este servicio nos devuelve un token de acceso que podemos utilizar para consumir la información protegida de nuestros usuarios.
Muchas compañías y servicios populares (Google, Twitter, Github, Spotify y muchos otros) aprovechan muy bien este tipo de mecanismos para compartir sus APIs con otras aplicaciones o incluso para otros proyectos de las mismas marcas.
Artículo recomendado: Una introducción a OAuth 2.0.
¿Qué tipo de seguridad podemos utilizar en SPAs? ¿¡Esto sí es seguro de verdad!? ¿Cuáles librerías utilizamos para implementar OAuth? ¿Qué hay de Open ID Connect!?
No hay problema, todas estas preguntas (y todas las que tengas) las puedes resolver tomando el Curso de Autenticación con OAuth con nuestro profesor @glrodasz, ingeniero en Auth0 y coorganizador de muchas comunidades como Medellín CSS.
¡Nos vemos en el curso! ¡#NuncaParesDeAprender! 🤓💚
👮 Autenticación 🆚 Autorización 🤖
El proceso de autenticación consiste en identificar a los usuarios, quién es, cómo se viste, es o no buena gente, etc:
😬User: Hey! ¿Cómo vas, brother? Soy Fulano De Tal de Casi Creativo y quiero entrar a …
👮 Autenticación: ¡No me digas a dónde quieres ir! Yo solo me encargo de identificarte. ¿Qué método de autenticación te gustaría utilizar? Nuestra última actualización nos permite identificarte con mensajes de texto 😄
😁 User: Ehh, ¿Email y password?
👮 Autenticación: Ok. 😒 ¬¬
😁 User: Email: "[email protected]" y password “c.ntrasena m.y s.gura123!!".
👮 Autenticación: Credenciales incorrectas, tu correo electrónico no esta registrado en nuestra aplicación, inténtalo de nuevo o puede regis…
😁 User: Email: "[email protected]" y password "c.ntrasena m.y s.gura123!!”.
👮 Autenticación: Bienvenido. Por favor, guarde este token en el localStorage de su navegador y diríjase a Mr. Autorización que le indicará los lugares a donde tiene acceso, ¡buen viaje! 😄
Por otra parte, la autorización consiste en definir los permisos y limitaciones de los usuarios ya identificados:
😁 User: ¿Qué tal brother? Soy Fula…
🤖 Autorización: 🔥¡Token!🔥
😁 User: Oh claro, el token 🤔, bueno en fin, aquí tiene. Vengo para saber a dónde …
🤖 Autorización: Tiene permiso para visualizar su perfil y el de sus amigos pero no puede editar sus datos porque no ha entrado a link de verificación que le mandamos al correo HACE DOS DÍAS.
😁 User: Claro, claro. No se preocupe que apenas llegue a la casa reviso el…
🤖 Autorización: Buen viaje.
😁 User: Gracias pero, mi número de teléfono esta mal, ¿no puedo editarlo rápido y despues ya lo…
🤖 Autorización: No.
😁 User: Pero yo…
🤖 Autorización: No.
😁 User: Ok 😒.
Excelente! Un nuevo curso que seguir. Muchas gracias!