OAuth arrow2-down

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.

 

  1. Ubícate en la pestaña de Authorization.
  2. Selecciona en type: OAuth 2.0.
  3. En el campo Grant Type selecciona la opción de acuerdo con el flujo de la APIblobid0.png
  4. En el campo Access Token URL, verifica que la url sea la correspondiente.
  5. Registra tus credenciales de Client ID y Cliente Secret, que debes tener generadas al crear la aplicación en el portal.
  6. Registra el scope correspondiente a la capacidad a consumir, éste lo encuentras en el path de la operación.
  7. Oprime el botón Get New Access Tokeblobid1.png
  8. Aparecerá en una nueva ventana el token generado, en la cual deberás oprimir el botón Use Token. 
JWT arrow2-down

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.

blobid4.png

 

Datos para generar el certificado

 

Información de ejemplo​

  • Country Name: Código de país. Ej: CO​
  • StateorProvince: Departamento. Eje: ANTIOQUIA​
  • LocalityName: Ciudad. Ej: MEDELLIN​
  • OrganizationName: Nombre de la Organización. Ej: Mi Organización S.A.​
  • OrganizationalUnitName: BANCOLOMBIA​
  • CommonName: miorganizacion.com​

 

Características recomendadas​

  • Tamaño de clave: 2048​
  • Algoritmo de firma:SHA256 con RSA​
  • Formato del certificadoX.509 codificado en base 64

 

Generación certificado

 

Puede utilizar la herramienta OpenSSL para la creación del certificado.​

  1. Genera el certificado SSL para el firmado del token con el siguiente comando: opensslreq -newkey rsa:2048 -nodes -keyoutkey.pem -x509 -days 365 -outcertificate.pem​​
  2. Ingresa a JSON Web Tokens -jwt.io en explorador de internet y configura RS256.​
  3. Abre la herramienta de desarrollador en el navegador web.
blobid1.png
blobid2.png

 

Código NodeJS

 

  1. Pegar código NodeJS para generar el JSON del Web Token.​

​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

  1. En la casilla PayloadData, pegue el JSON resultado de la ejecución del código NodeJS.​
  2. El JWT es el resultado que aparece en la casilla Encoded, copie lo e ingréselo en el campo de la cabecera HTTP llamada json-web-token.​
  3. Igualmente pegue el texto del certificado público en el campo de la cabecera HTTP llamado X-Client-Certificate
blobid3.png
Diferencias entre OAuth 2.0 y JWT arrow2-down

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. 

API Key arrow2-down

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.