En este post vamos a ver la primera parte, o mejor dicho, el qué debemos entender primero cuando vamos a trabajar o desarrollar en entornos seguros.
Cabe destacar que este post, si bien es cierto que se adapta a cualquier tipo de arquitectura, esta pensado principalmente para microservicios ya que mencionaré el token JWT . Cuando lo hacemos en un sistema monolito normalmente se hace con la sesión del usuario, más que con el token JWT (aunque tambíen se puede).
Índex
1 - ¿Qué es la autenticación?
Autenticar es validar que alguien es quien dice que es, lo que llamamos coloquialmente hacer “login” o introducir el usuario y la contraseña.
Pero hoy en día debido a temas de seguridad, problemas en páginas webs que son hackeadas etc, un simple usuario y contraseña no son suficientes y muchos sitios webs requieren que introduzcas dos datos privados, lo que comúnmente llamamos doble autenticación.
Y suelen ser dos de los siguientes:
- Contraseñas: El usuario y la contraseña normal.
- PIN de uso único: cuando haces el login, te llega un email o un SMS con un código y debes introducir ese código.
- Aplicaciones de autenticación: hay ciertas aplicaciones, comúnmente de uso en el móvil donde tienes un pin que tiene una validez de 1 minuto; muy comunes ya en todos los sitios web.
- Biométricos, huellas dactilares, escáneres de retina, etc. Muy vistosos y comunes en películas, pero en el mundo real, más allá de la huella para desbloquear el móvil o el reconocimiento facial para algunos teléfonos.
A día de hoy, y con el trabajo desde casa, imagino que todos estamos ya acostumbrados a la doble autenticación.
2 - ¿Qué es la autorización?
Una vez hemos validado que somos quien decimos ser (Autenticación) debemos comprobar si tenemos acceso a ciertas partes de la aplicación o diferentes funciones. esta acción se hace a través de la autorización, y por supuesto varía dependiendo del usuario.
Un símil con la vida real sería el carnet de conducir, tu tienes tu carnet que indica quién eres (autenticación), y en la parte de detrás te indica que tipos de vehículos puedes conducir (autorización) y si quieres conducir un camión, necesitas sacarte el carnet de camión y que las autoridades te actualicen dicha información (dar acceso).
3 - Login social
Como habrás podido imaginar, configurar toda la infraestructura para dar soporte a autenticación y autorización no es sencillo, y se complica mucho más si añadimos la doble autenticación.
Por ello, tenemos opciones de terceros, las más comunes y famosas son Google, Facebook Twitter o incluso GitHub, es lo que denominamos login social. Y en mi opinión son una maravilla, porque así evitamos tener que crearnos cuentas en todas partes, tener que recordar contraseñas, etc. Haces click en el botón de “loguearse con google” y todo funciona perfectamente.
Otras opciones son Auth0, OKta, ForgeRock, SecureAuth, o incluso tener tu un microservicio con un fork de IdentityServer (escrito en .NET) pero desde hace un par de meses no es gratuito para empresas.
Pero, ¿cómo funciona? ¿Cuál es la magia detrás de esta tecnología? La respuesta rápida son los token JWT. Pero la respuesta detallada es algo más larga
3.1 - Autenticación con OAuth 2.0 y OpenID Connect
Oauth 2.0
es el estándar que da sentido a esta magia, ya que separa ambas funciones, la autenticación para verificar la identidad y la autorización para los permisos. Y a través de llamadas HTTPS API
podemos llamar a los diferentes servicios que nos proporcionan el control de acceso (Facebook, Google, Auth0, IdentityServer, etc).
Pero cuando trabajamos con OAuth 2.0
no lo hacemos directamente con él, sino que lo hacemos a través de OpenID connect
(OIDC), que es un wrapper o una capa encima de OAuth 2.0
que permite a aplicaciones de terceros verificar la identidad el usuario y leer la información básica. Y OpenID connect utiliza los tokens JWT para devolver la información del usuario.
En el siguiente post veremos cómo autenticar/validar un usuario en una api C# a través de OpenID Connect.