Sesión 4: 3h06m40s
Para implementar los proceso de autenticación y autorización vamos a utilizar Oauth2, OpenID Connect y JWT.
OAuth 2.0 (Token de acceso)
- OAuth 2.0 (Open Authorization) es un protocolo de autorización que permite a una aplicación obtener acceso limitado a los recursos de un usuario en otro servicio web.
- Protocolo que permite a los usuarios compartir su información almacenada en un sitio web con otro sitio web sin necesidad de proporcionar sus credenciales de inicio de sesion.
- En lugar de compartir contraseñas, las aplicaciones obtienen tokens de acceso que se pueden ser utilizados para acceder a ciertos recursos en nombre del usuario. Estos tokens de acceso son emitidos por un servidor de autorización después de que el usuario ha proporcionado su consentimiento.
- OAuth 2.0 es ampliamente utilizado en la web por servicios como Google, Facebook, Twitter y Microsoft para permitir el uso de funcionalidades de sus plataformas en otras aplicaciones. Por ejemplo, una aplicación puede utilizar OAuth 2.0 para obtener permiso para acceder a los datos de tu calendario en Google, o para publicar actualizaciones de estado en tu nombre en Twitter.
- Es importante destacar que OAuth 2.0 es un protocolo de autorización, no de autenticación. Aunque a menudo se utiliza en combinación con protocolos de autenticación como OpenID Connect, OAuth 2.0 por sí solo no proporciona formas de autenticar la identidad de los usuarios. La autenticación la hace un proveedor.
Flujos de concesión Oauth2
- Authorization Code Grant: Este es flujo más común y se utiliza para aplicaciones que se ejecutan en un servidor web. El proceso implica redirigir al usuario a un servidor de autorización, que luego redirige de vuelta a la aplicación con un código de autorización. Este código se intercambia por un token de acceso. Se usa en aplicaciones web o mobile.
- Implicit Grant: Este flujo fue diseñado para aplicaciones basadas en JavaScript que se ejecutan en el navegador del usuario. En lugar de recibir un código de autorización que debe ser intercambiado por un token de acceso, la aplicación recibe directamente el token de acceso. Este flujo se considera menos seguro y ya no se recomienda su uso.
- Resource Owner Password Credentials: Este flujo permiete a la aplicación recoger las credenciales del usaurio (nombre de uusario y contraseña) y usarlas para obtener un token de acceso directamente. Este flujo solo recomienda para aplicaciones de confianza, como las creadas por el mismo servicio que proporciona la API. Cuando quieres implementar tu propio Login (usualmente para aplicaciones antiguas).
- Client Credentials Grant: Este flujo es aplicaciones que acceden a su propio servicio, no en nombre de un usuario. La aplicación utiliza sus propias credenciales para obtener un token de acceso. Se usa para que una aplicación acceda a otra aplicación.
OpenID Connect (Token de identificación)
- OpenID Connect es un estándar de autenticación que se construye sobre el protocolo OAuth 2.0. Mientras que OAuth 2.0 se utiliza para la autorización, OpenID Connect introduce el concepto de un ID token, que permite a la aplicación cliente verificar la identidad del usuario.
- El ID token contiene información sobre el usuario. Esta información puede incluir el nombre de usuario, la dirección de correo electrónico, la imagen de perfil y otros datos que el usuario ha acordado compartir.
- OpenID Connect genera un token de identificación. No hay nada de permisos, solo me identifico.
- En vez de estar usando mis credenciales para realizar una operación, OpenID me entrega una llave (un token) que va a representar mi usuario y contraseña. La particularidad de este token es que tiene un tiempo de vida.
- OpenID Connect también introduce un nuevo endpoint, el endpoint de userinfo, que la aplicación cliente puede utilizar para obener más información sobre el usuario una vez que ha obtenido un token de acceso.
- OpenID Connect se utiliza para autenticar al usuario y proporcionar información sobre su identidad a la aplicación. Esto lo convierte en una solución ideal para el inicio de sesión único (SSO), donde un usuario puede iniciar sesión en varias aplicaciones con una sola cuenta.
OpenID Connect utiliza OAuth para la generación del token de acceso.
- Authorization Code Flow. Este el flujo que tenemos que usar para autenticar todas nuestras aplicaciones.
- Implicit Flow. Este flujo se considera menos seguro para la autenticación y ya no se recomienda su uso.
- Hybrid Flow.
Tokens
- Un token es una cadena de caracteres generada por un servidor en respuesta a una solicitud válidad de autenticación. Este token representa la identidad del usuario (token de identificación) y los permisos de acceso (token de acceso), y se utiliza para acceder a recursos protegidos.
- Un token es como un pase de acceso digital que permite al usuario acceder a ciertos recursos y realizar ciertas operaciones. Es una parte esencial de los sistemas de autenticación y autorización modernos.
Características de un token
- Identificación del usuario: Un token representa a un usuario específico. Contiene información (llamada "claims" o afirmaciones) que identifica al usuario ante el servidor. Esta información puede incluir el ID del usuario, el nombre de usuario, el correo electrónico y otros datos.
- Autorización: Además de identificar al usuario, un token también puede contener información sobre los permisos del usuario. Esto permite al servidor determinar qué recursos puede acceder el usuario y qué operaciones puede realizar.
- Seguridad: Son emitidos por un servidor de autorización después de que el usuario se ha autenticado correctamente. Los tokens pueden ser firmados digitalmente para garantizar su integridad y autenticidad, y también pueden ser cifrados para proteger la información que contienen.
- Formato: Los tokens pueden estar en varios formatos, como JWT (JSON Web Tokens), SAML (Security Assertion Markup Language), tokens opacos y PASETO (Platform-Agnostic Security Tokens). Cada formato tiene sus propias características y usos.
- Vida útil: Los tokens tienen una vida limitada. Una vez que un token ha expirado, ya no puede ser utilizado para acceder a recursos, y el usuario debe autenticarse de nuevo para obtener un nuevo token.
Formatos de un token
¿Qué es un JWT?
- JSON Web Token es un estándar abierto de la industria que se usa para compartir información entre dos entidades, generalmente un cliente (como el front-end de su aplicación) y un servidor (el backend de su aplicación).
- Contiene objetos JSON que tiene la información que necesita ser compartida. Cada JWT se firma mediante criptografía (hashing) para garantizar qaue el contenido JSON (también conocido como notificaciones JWT) no pueda ser alterado por el cliente o una parte malintencionada.
Estructura de un JWT
Un JWT contiene tres partes:
- Cabecera: Consta de dos partes:
- El algoritmo de firma que se está utilizando.
- El tipo de token, que, en este caso, es principalmente "JWT".
- Carga útil: la carga contiene las notificaciones o el objeto JSON.
- Firma: Una cadena que se genera a través de un algoritmo criptográfico que se puede utilizar para verificar la integridad de la carga útil JSON.
No comments:
Post a Comment