JWT (JSON Web Token) es un estándar que define una manera de compartir información entre dos sistemas. Este estándar es bastante utilizado para gestionar la autenticación de usuarios debido a que su función principal es la de validar la identidad de la persona después de que ya haya ingresado, al menos una vez, al sistema.
Los JWT son un objeto JSON que nos permite propagar datos como los tiempos de acceso, la identidad y los privilegios de un usuario, de una forma compacta y autocontenida, sin poner en riesgo la seguridad de ambos sistemas, además, su información es verificada y se puede comprobar su veracidad puesto que se firma de manera virtual.
Generalmente para su método de encriptación se utiliza el algoritmo HS256, sin embargo, existen muchas herramientas, sitios web y librerías que te permitirán crear los JWT con diferentes métodos de encriptación y observar de cerca su funcionamiento.
Una de sus ventajas es que se puede establecer en sitios como URL, parámetros de respuesta POST, en un header HTTP o desde prácticamente cualquier otro espacio en la petición debido a que su tamaño no es muy extenso. Un JWT se ve de la siguiente manera:
Tiene tres elementos, que siempre van separados por un punto (.) :
- Header: Contiene la información del algoritmo que 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.
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. Para el consumo de las API usamos JWT firmados de forma asimétrica (usando llave publica y llave privada) en su forma compact.
Al usar este mecanismo para el consumo de APIs logramos asegurar la veracidad del usuario durante la comunicación que se genera entre aplicación consumidora y API. Para ello es necesario generar un certificado de la siguiente manera:
¿Cómo generar el certificado?
1. Datos para generar el certificado
- 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
- Tamaño de clave: 2048 (recomendado)
- Algoritmo de firma:SHA256 con RSA (recomendado)
- Formato del certificadoX.509 codificado en base 64 (recomendado)
2. Generación certificado
Puedes utilizar la herramienta OpenSSL para la creación del certificado.
- 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
- Ingresa a JSON Web Tokens -jwt.io en explorador de internet y configura RS256.
- Abre la herramienta de desarrollador en el navegador web.
3. Código NodeJS
- 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));
- Copiar y pegar JSON generado en campo PAYLOAD DATA.
4. Ingresar resultado en el Payload
- En la casilla PayloadData, pegue el JSON resultado de la ejecución del código NodeJS.
- 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.
- Igualmente pegue el texto del certificado público en el campo de la cabecera HTTP llamado X-Client-Certificate
Comentarios
0 comentarios
Inicie sesión para dejar un comentario.