Seguridad
Aquí encontrarás información de las APIs, componentes o características que debes tener presente cuando consumes nuestros productos de APIs.
OAuth (Open Authorization) es un framework y estándar de seguridad que da a la aplicación cliente acceso a los datos del usuario, con ámbito (scope) y tiempos limitados.
Este estándar no proporciona al consumidor las credenciales del usuario, desacoplando la autenticación y autorización de los datos.
Y al especificar los ámbitos de una API en el registro de la aplicación cliente, esta puede obtener un token de acceso a un recurso concreto, por lo tanto, OAuth no es un protocolo de autenticación.
Gracias a la autorización limitada a datos valiosos para el uso y consumo de las APIs, con un token de acceso, podemos proporcionarte una experiencia de acceso sin interrupciones y de inicio de sesión único, velando por la seguridad y la protección de los datos de nuestros usuarios.
OAuth provee diferentes tipos de flujo para la autenticación/autorización:
- Authorization Code (Código de Autorización):En esta configuración, el usuario se autentica junto con el servidor de recursos y da al consentimiento de la app, el acceso a sus recursos protegidos sin delegar el nombre de usuario/contraseña a la app.
- Implicit (Implícito): Este es un flujo para aplicaciones de una sola página (Single-Page Applications)
- Resource Owner Password Credentials (Flujo Password): se envían las credenciales del usuario final a través de la aplicación consumidora, permitiendo a la misma, conocer las credenciales.
- Client Credentials (Flujo de Aplicación): Es usado cuando la aplicación consumidora no tiene interacción directa con el cliente y es una aplicación de confianza, debido que, para ejecutar este flujo, no se requiere de la autorización del usuario para acceder a su información. Los únicos datos que se validan en el servidor de OAuth son las credenciales de la aplicación consumidora.
De acuerdo con el flujo valida en la sección de seguridad de la API, que flujo está configurado para así mismo configurarlo en la aplicación consumidora.
A continuación, te brindamos el paso a paso para configurar el OAuth, en pruebas hechas en postman.
- Ubícate en la pestaña de Authorization.
- Selecciona en type: OAuth 2.0.
- En el campo Grant Type selecciona la opción de acuerdo con el flujo de la API
- En el campo Access Token URL, verifica que la url sea la correspondiente.
- Registra tus credenciales de Client ID y Cliente Secret, que debes tener generadas al crear la aplicación en el portal.
- Registra el scope correspondiente a la capacidad a consumir, éste lo encuentras en el path de la operación.
- Oprime el botón Get New Access Toke
- Aparecerá en una nueva ventana el token generado, en la cual deberás oprimir el botón Use Token.
JWT (JSON Web Token) es un estándar abierto que define una forma compacta y autocontenida para compartir información entre dos componentes como objetos JSON.
Los JWT pueden ser firmados usando un secreto (Con el algoritmo HMAC) o con un par de llaves privada y pública usando RSA o ECDSA.
Tiene tres elementos:
- Header: Contiene la información de que algoritmo se usa para firmar el mensaje
- Payload: Es la información a compartir que se quiere firmar y verificar digitalmente
- Signature: Es la firma resultado del procesamiento del header y el payload con el algoritmo definido en el header y la llave privada o secreto establecido.
La forma compacta se conforma de los 3 elementos anteriores separados por punto de la siguiente manera:
base64URL(Header).base64URL(Payload).Signature
Para el consumo de las API usamos JWT firmados de forma asimétrica (usando llave publica y llave privada) en su forma compacta.
Cómo generar el certificado
Como indicábamos para asegurar la identidad del consumidor durante la comunicación entre la aplicación y el API es necesario generar un certificado.
Se debe generar la llave pública y privada.
Datos para generar el certificado
Información de ejemplo
Características recomendadas
|
Generación certificado
Puede utilizar la herramienta OpenSSL para la creación del certificado.
|
Código NodeJS
let iat= new Date()/1000; let exp= iat+ 600*60; let min = 17592186044416;//Hex1000000000000 let max= 281474976710655;//Hexffffffffffff let nonce= Math.floor((Math.random() * (max-min + 1)) + min).toString(16); let jwtPayload= { iss: "PruebaPayAPP", sum: "ccb2eebf-889c-47b6-ad55-75346cf70a08", aud: “APIGateway_DMZ", scope:"ScopeBetween" , exp: exp, iat: iat, nonce: nonce } console.log(JSON.stringify(jwtPayload));
2. Copiar y pegar JSON generado en campo PAYLOAD DATA. |
Ingresar resultado en el Payload
|
La diferencia entre OAuth 2.0 y JWT, es que, OAuth es un framework que autoriza accesos a recursos de diversas aplicaciones por medio de un token, mientras que JWT es un protocolo de autenticación que genera, envía y valida el token de acceso.
Es decir, que cumplen objetivos diferentes en el proceso de seguridad y protección de datos.
Una API Key actúa como un TOKEN de autenticación secreto, o como un identificador único. Estas claves vienen junto con un conjunto de derechos de acceso para la API asociada.