SlideShare una empresa de Scribd logo
Seguridad para aplicaciones
Web Java con JSON Web Tokens
(JWT)
Eudris Cabrera
@eudriscabrera
Eudris Cabrera
Graduado de Ingeniería Telemática en la PUCMM. Entusiasta
de la tecnología y el software libre, desarrollador Java,
instructor ocasional (Java / Linux), aficionado del
béisbol/sóftbol y los bailes latinos.
En el tiempo libre, escribe artículos, realiza charlas, participa
en eventos tecnológicos y ayuda en la revisión de
documentación técnica en el mundo Java y el código abierto.
REPUBLICA
DOMINICANA
¿De dónde soy?
https://jconfdominicana.orgTwitter:
@JavaDominicano
5
JConf
Dominicana
2019
6
JConf
Dominicana
2019
AGENDA
● Conceptos Fundamentales
● Mecanismo de Autenticación
● Mecanismo de Autenticación en
Java
● Desafíos que enfrentamos al
momento de aplicar un mecanismo
de seguridad.
● Plataforma de Manejo de Identidad
Al desarrollar una aplicación, la seguridad es un punto muy
importante.
Cualquier código o aplicación que se ejecute en una red es
vulnerable a los riesgos y puede amenazar los problemas de
privacidad, seguridad e integridad.
Conceptos Fundamentales
Autenticación
Autenticación es la primera linea de defensa. La aplicación debe determinar si el usuario es quién
dice ser o si la entidad, un servidor o programa, es lo que dice ser.
La forma más común de autenticación es la de id usuario y contraseña.
Las políticas de autenticación, los procesos y el registro deben ser diseñado, desarrollado y
documentado para garantizar que la aplicación evite que usuarios no autorizados acceden al sitio.
Autorización y Control de Acceso
La autenticación le dice a un usuario "Te reconozco como usuario". La autorización dice: "Ahora
que sé quién eres, también sé lo que tienes permitido hacer; qué datos tienes permitido ver y
modificar".
El control de acceso determina desde dónde se puede conectar un usuario; a qué hora pueden
conectarse y el tipo de cifrado requerido.
El objetivo es desarrollar una seguridad estrategia para proteger los datos y sistemas de back-end y
front-end. Esto se puede lograr mediante el uso de roles, credenciales y etiquetas de sensibilidad.
Autorización y Control de Acceso
Documente los roles de los usuarios durante el desarrollo y determine quién tendrá la
responsabilidad de asignar roles específicos a los usuarios
Control de Acceso Basado en Roles
El acceso basado en roles se refiere a los permisos de acceso que se pueden asignar a un usuario o
grupo de usuarios en una aplicación.
Estos pueden ser, agregar nuevo, editar, modificar y borrar un registro. Poder acceder un
formulario, entre otros.
El uso de roles nos permite:
1. Proporcionar acceso exclusivo a usuarios específicos.
2. Agregar, cambiar o retirar fácilmente los permisos de acceso a usuarios.
3. Reduce la posibilidad de cometer errores al asignar permisos a un usuario.
Single sign-on(Autenticación única)
Single sign-on se refiere a la capacidad de que los usuarios se autentiquen una sola vez al inicio de
una sesión y posteriormente puedan utilizar varias aplicaciones sin necesidad de estarse
autenticando para cada una.
Mecanismo de Autenticación
1. Autenticación básica
2. Autenticación basada en formulario
3. Autenticación Digest
4. Autenticación basada en Token
5. Otras
La autenticación básica y la autenticación basada en formularios no son mecanismos de
autenticación muy seguros.
La autenticación básica envía usuario y contraseña a través de Internet como texto codificado en
Base64.
La autenticación basada en formularios envía estos datos como texto plano(plain text).
Estas formas de autenticación dejan los datos del usuario expuestos y vulnerables. Si alguien puede
interceptar la transmisión, el nombre de usuario y la información de contraseña se pueden
decodificar fácilmente.
Sin embargo, cuando se utiliza un mecanismo de transporte seguro, como SSL, o seguridad a nivel
de red, como el protocolo IPsec o una VPN, junto con la autenticación básica o basada en
formularios, algunas de estas preocupaciones pueden aliviarse.
Autenticación básica(Basic authentication)
Autenticación basada en formulario
Autenticación Digest
Al igual que la autenticación básica, la autenticación Digest autentica a un usuario en función de un
nombre de usuario y una contraseña.
Sin embargo, a diferencia de la autenticación básica, la autenticación de Digest no envía contraseñas
de usuario a través de la red.
En cambio, el cliente envía un hash criptográfico unidireccional de la contraseña y datos adicionales.
Aunque las contraseñas no se envían, requiere que el equivalente de contraseña de texto plano esté
disponible para que el contenedor de autenticación pueda validar los autenticadores recibidos
calculando el digest esperado.
Los métodos anteriores de autenticación nos obligan a tener que enfrentarnos a una serie de
desafios tales como : manejo de sesiones, escalabilidad, cross-origin resource sharing (CORS) y
cross-site request forgery (CSRF).
Con estos problemas, siendo la escalabilidad el principal ya que las sesiones están almacenada en
memoria, fue necesario probar un nuevo enfoque diferente, la autenticación basada en Token.
Autenticación basada en Token
La autenticación basada en tokens es una técnica de seguridad que autentica a los usuarios que
intentan iniciar sesión en un servidor, una red u otro sistema seguro, utilizando un token de
seguridad proporcionado por el servidor.
Una autenticación es exitosa si un usuario puede demostrar a un servidor que él o ella es un usuario
válido al pasar un token de seguridad.
El servicio valida el token de seguridad y procesa la solicitud del usuario.
Autenticación basada en Token
Una vez que el token es validado por el servicio, se utiliza para establecer el contexto de seguridad
para el cliente, de modo que el servicio pueda tomar decisiones de autorización o auditar la
actividad para las sucesivas solicitudes de los usuarios.
Seguridad para aplicaciones web java con json web tokens (jwt)  2020
Autenticación basada en Token
La autenticación basada en tokens es importante en todas partes en la web hoy en día. Con la
mayoría de las compañías web que usan una API, los tokens son la mejor manera de manejar la
autenticación para múltiples usuarios.
Como los tokens son almacenados en el lado del cliente, no hay información de estado y la
aplicación se vuelve totalmente escalable.
Podemos usar el mismo API para diferentes apliaciones (Web, Mobile, Android, iOS, ...) solo debemos
preocuparnos de enviar los datos en formato JSON y generar y descrifrar tokens en la autenticación
y posteriores peticiones HTTP a través de un middleware.
Autenticación basada en Token
También nos añade más seguridad. Al no utilizar cookies para almacenar la información del usuario,
podemos evitar ataques CSRF (Cross-Site Request Forgery) que manipulen la sesión que se envía al
backend.
Por supuesto podemos hacer que el token expire después de un tiempo lo que le añade una capa
extra de seguridad.
¿Quién usa la autenticación basada en tokens?
Cualquier API o aplicación web importante que haya encontrado probablemente haya usado tokens.
Las aplicaciones como Facebook, Twitter, Google+, GitHub y muchas más usan tokens.
JSON Web Tokens
JSON Web Token, comúnmente conocidos como JWT, es un estándar abierto (RFC 7519) que define
un modo compacto y autónomo para transmitir de forma segura la información entre las partes
como un objeto JSON.
JWT define un formato estandar para autenticación y autorización de los usuarios en las
aplicaciones.
Su utilización ha ganado popularidad en los últimos años porque permite que los servidores acepten
solicitudes simplemente validando el contenido de estos JWTS.
JSON Web Tokens
Es decir, las aplicaciones que usan JWTS ya no tienen que contener cookies u otros datos de sesión
sobre sus usuarios.
Esta característica facilita la escalabilidad mientras mantiene las aplicaciones seguras.
JSON Web Tokens
● Autenticación y autorización basada en Token
● Compactible con OpenId
● JWT -> RFC 7519 (Estandar abierto)
JSON Web Token
El formato de un JWT está compuesto por 3 strings separados por un punto . algo así como:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaW
F0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Cada string significa una cosa: Header, Payload y Signature.
JSON Web Token
Header
La primera parte es la cabecera del token, que a su vez tiene otras dos partes, el tipo, en este caso
un JWT y la codificación utilizada.
Comunmente es el algoritmo HMAC SHA256, El contenido sin codificar es el siguiente:
{
"typ": "JWT",
"alg": "HS256
}
Codificado sería: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
JSON Web Token
Payload
El Payload está compuesto por los llamados JWT Claims donde irán colocados la atributos que
definen nuestro token. Exiten varios que puedes consultar aquí, los más comunes a utilizar son:
{
"sub": "54a8ce618e91b0b13665e2f9",
"iat": "1424180484",
"exp": "1425390142"
}
JSON Web Token
Payload
sub: Identifica el sujeto del token, por ejemplo un identificador de usuario.
iat: Identifica la fecha de creación del token, válido para si queremos ponerle una fecha de
caducidad. En formato de tiempo UNIX.
exp: Identifica a la fecha de expiración del token. Podemos calcularla a partir del iat. También en
formato de tiempo UNIX.
JSON Web Token
También podemos añadirle más campos, incluso personalizados, como pueden ser el rol del
usuario, etc.
{
"sub": "54a8ce618e91b0b13665e2f9",
"iat": "1424180484",
"exp": "1425390142",
"admin": true,
"role": 1
}
Codificado sería:
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
JSON Web Token
Signature
La firma es la tercera y última parte del JSON Web Token. Está formada por los anteriores
componentes (Header y Payload) cifrados en Base64 con una clave secreta (almacenada en nuestro
backend). Así sirve de Hash para comprobar que todo está bien.
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload), secret
);
Codificado sería: SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
JSON Web Token
Signature
Por tanto, todo nuestro JSON Web Token, una vez codificado tendrá esta formato:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZS
I6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf
36POk6yJV_adQssw5c
Si lo comprobamos en la web JWT.io vemos que lo traduce a los campos que hemos visto.
Mecanismo de Autenticación en Java
En la mayoría de contendores web Java y servidores de aplicaciones podemos encontrar los
siguientes mecanismo de autenticación.
Servlet Java EE Security (Java EE 8 / Jakarta EE)
BASIC BASIC
FORM FORM
DIGEST Custom FORM
MicroProfile
JWT (Disponible en Payara Server / Payara Micro, RedHat Thorntail v2 & Quarkus, Open Liberty,
Kumuluzee, Oracle Helidon, entre otros )
Validación de un JWT en Java (JJWT)
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
byte[] key = getSignatureKey();
String jwt = Jwts.builder().setIssuer("http://trustyapp.com/")
.setSubject("users/1300819380")
.setExpiration(expirationDate)
.put("scope", "self api/buy")
.signWith(SignatureAlgorithm.HS256,key)
.compact();
Desafíos que enfrentamos al momento de
aplicar un mecanismo de seguridad
Desafíos
Cómo puedo aplicar "correctamente":
¿Gestionar de forma segura las identidades de los usuarios?
¿Aplicar patrones de seguridad sin reinventar la rueda?
¿Asegurar mis aplicaciones web / servicios web / micro servicios con riesgos mínimos?
¿Reducir el impacto en el rendimiento en entornos de alta disponibilidad?
Plataforma de Manejo de Identidad al Rescate !!
Plataforma de Manejo de Identidad
● ¡Se te quitan los desafíos de seguridad!
● La gestión de la dentidad es la principal preocupación.
● Actualizaciones periódicas sobre vulnerabilidades conocidas.
● Cumple con el conjunto de estándares OpenID
Plataforma de Manejo de Identidad
Soluciones populares:
❖ Auth0
❖ Okta
❖ Keycloak
❖ Oracle Identity Management
❖ ForgeRock
https://github.com/ecabrerar/jwt-seguridad-web-conferencias.git
Código fuente de los ejemplos en GitHub
¿Preguntas?
¡Gracias
P o r
Acompañarnos!
Asuntos Legales
Todas las marcas registradas, así como todos los logotipos,
imágenes, fotografías, audio y vídeos mostrados en esta
presentación son propiedad de sus respectivos propietarios y/o
representantes.
Su utilización es solamente para fines ilustrativos.
Referencias
Enlaces:
https://dzone.com/articles/application-security-for-java-developers
https://docs.oracle.com/javaee/7/tutorial/security-webtier002.htm
https://www.sans.org/reading-room/whitepapers/securecode/paper/1389
https://blog.payara.fish/securing-a-rest-service
https://blog.payara.fish/java-ee-security-api-jsr-375/soteria-with-jwt-tokens
https://jwt.io
https://developers.redhat.com/blog/2019/12/11/keycloak-core-concepts-of-open-source-identity-and-access-management/?sc_cid
=701f2000000RtqCAAS
@eudriscabrera
@eudris
@ecabrerar
@eudriscabrera
Eudris Cabrera Rodríguez
Ingeniero Telemático
Desarrollador de Software / Consultor Informático
eudris@gmail.com
https://www.linkedin.com/in/eudriscabrera
http://www.slideshare.net/eudris
https://twitter.com/eudriscabrera
https://github.com/ecabrerar

Más contenido relacionado

PDF
Penetration Testing Tutorial | Penetration Testing Tools | Cyber Security Tra...
PDF
Securing a Web App with Passwordless Web Authentication
PDF
01 Metasploit kung fu introduction
PPT
CEH - Module 5 : System Hacking
PPT
Cloud presentation
PDF
Learn Ethical Hacking in 10 Hours | Ethical Hacking Full Course | Edureka
PPTX
Setting up a secure development life cycle with OWASP - seba deleersnyder
DOCX
System Hacking
Penetration Testing Tutorial | Penetration Testing Tools | Cyber Security Tra...
Securing a Web App with Passwordless Web Authentication
01 Metasploit kung fu introduction
CEH - Module 5 : System Hacking
Cloud presentation
Learn Ethical Hacking in 10 Hours | Ethical Hacking Full Course | Edureka
Setting up a secure development life cycle with OWASP - seba deleersnyder
System Hacking

La actualidad más candente (20)

PPTX
Owasp Top 10 A1: Injection
PDF
Penetration testing web application web application (in) security
PPT
Cyber security vs information assurance
PDF
ATT&CKing Your Adversaries - Operationalizing cyber intelligence in your own ...
PDF
What is SQL Injection Attack | How to prevent SQL Injection Attacks? | Cybers...
PDF
Design patterns in Magento
PPTX
Vapt( vulnerabilty and penetration testing ) services
PDF
REST API Authentication Methods.pdf
PDF
School Management System 3.0(User Guide)
PDF
Bài giảng kiểm thử xâm nhập PTIT
PPTX
Storm-Control
PDF
RSA SecurID Access
DOCX
Báo cáo đề tài thực tập tốt nghiệp
PPTX
Web application-security
PPTX
Tổng quan về AWS cực hay
PDF
Secure by Design - Security Design Principles for the Rest of Us
PPT
Ch07 Access Control Fundamentals
PDF
ISC2 CC Course (Certified in Cybersecurity) - Part 2.pdf
PDF
Guia seguridad informatica
Owasp Top 10 A1: Injection
Penetration testing web application web application (in) security
Cyber security vs information assurance
ATT&CKing Your Adversaries - Operationalizing cyber intelligence in your own ...
What is SQL Injection Attack | How to prevent SQL Injection Attacks? | Cybers...
Design patterns in Magento
Vapt( vulnerabilty and penetration testing ) services
REST API Authentication Methods.pdf
School Management System 3.0(User Guide)
Bài giảng kiểm thử xâm nhập PTIT
Storm-Control
RSA SecurID Access
Báo cáo đề tài thực tập tốt nghiệp
Web application-security
Tổng quan về AWS cực hay
Secure by Design - Security Design Principles for the Rest of Us
Ch07 Access Control Fundamentals
ISC2 CC Course (Certified in Cybersecurity) - Part 2.pdf
Guia seguridad informatica
Publicidad

Similar a Seguridad para aplicaciones web java con json web tokens (jwt) 2020 (20)

PPTX
Qué es eso de OAuth y como se implementa en Symfony2 (y otros)
PPTX
JWT.pptx
PPTX
OAuth and OpenID
PDF
Asegurando APIs en Symfony con JWT
PDF
Meetup En mi local funciona - Protegiendo tu API REST con JWT en aplicaciones...
PDF
Oauth v2-rev
PPTX
Presentacion-Oauth
PPTX
GFI - Seguridad en tus APIs
PDF
Entendiendo o auth
PDF
La importancia de la seguridad en los json payloads
PDF
Autenticación en aplicaciones .Net web y nativas
PPTX
Meetup TCMS OAuth2
PPTX
Oauth (Open Authorization)
PPTX
Seguridad en las apis desde un punto de vista de developer
PPTX
Presentación sso con cas
PPTX
Implement Identity Server with .NET
PDF
Tema 7
Qué es eso de OAuth y como se implementa en Symfony2 (y otros)
JWT.pptx
OAuth and OpenID
Asegurando APIs en Symfony con JWT
Meetup En mi local funciona - Protegiendo tu API REST con JWT en aplicaciones...
Oauth v2-rev
Presentacion-Oauth
GFI - Seguridad en tus APIs
Entendiendo o auth
La importancia de la seguridad en los json payloads
Autenticación en aplicaciones .Net web y nativas
Meetup TCMS OAuth2
Oauth (Open Authorization)
Seguridad en las apis desde un punto de vista de developer
Presentación sso con cas
Implement Identity Server with .NET
Tema 7
Publicidad

Último (6)

PPTX
Derechos_de_Autor_y_Creative_Commons.pptx
DOCX
trabajo programacion.docxxdxxxddxdxxdxdxxxdxxdxdxd
PPTX
Conceptos basicos de Base de Datos y sus propiedades
PDF
AutoCAD Herramientas para el futuro, Juan Fandiño
PDF
Su punto de partida en la IA: Microsoft 365 Copilot Chat
PPTX
sistemas de informacion.................
Derechos_de_Autor_y_Creative_Commons.pptx
trabajo programacion.docxxdxxxddxdxxdxdxxxdxxdxdxd
Conceptos basicos de Base de Datos y sus propiedades
AutoCAD Herramientas para el futuro, Juan Fandiño
Su punto de partida en la IA: Microsoft 365 Copilot Chat
sistemas de informacion.................

Seguridad para aplicaciones web java con json web tokens (jwt) 2020

  • 1. Seguridad para aplicaciones Web Java con JSON Web Tokens (JWT) Eudris Cabrera @eudriscabrera
  • 2. Eudris Cabrera Graduado de Ingeniería Telemática en la PUCMM. Entusiasta de la tecnología y el software libre, desarrollador Java, instructor ocasional (Java / Linux), aficionado del béisbol/sóftbol y los bailes latinos. En el tiempo libre, escribe artículos, realiza charlas, participa en eventos tecnológicos y ayuda en la revisión de documentación técnica en el mundo Java y el código abierto.
  • 7. AGENDA ● Conceptos Fundamentales ● Mecanismo de Autenticación ● Mecanismo de Autenticación en Java ● Desafíos que enfrentamos al momento de aplicar un mecanismo de seguridad. ● Plataforma de Manejo de Identidad
  • 8. Al desarrollar una aplicación, la seguridad es un punto muy importante. Cualquier código o aplicación que se ejecute en una red es vulnerable a los riesgos y puede amenazar los problemas de privacidad, seguridad e integridad.
  • 10. Autenticación Autenticación es la primera linea de defensa. La aplicación debe determinar si el usuario es quién dice ser o si la entidad, un servidor o programa, es lo que dice ser. La forma más común de autenticación es la de id usuario y contraseña. Las políticas de autenticación, los procesos y el registro deben ser diseñado, desarrollado y documentado para garantizar que la aplicación evite que usuarios no autorizados acceden al sitio.
  • 11. Autorización y Control de Acceso La autenticación le dice a un usuario "Te reconozco como usuario". La autorización dice: "Ahora que sé quién eres, también sé lo que tienes permitido hacer; qué datos tienes permitido ver y modificar". El control de acceso determina desde dónde se puede conectar un usuario; a qué hora pueden conectarse y el tipo de cifrado requerido. El objetivo es desarrollar una seguridad estrategia para proteger los datos y sistemas de back-end y front-end. Esto se puede lograr mediante el uso de roles, credenciales y etiquetas de sensibilidad.
  • 12. Autorización y Control de Acceso Documente los roles de los usuarios durante el desarrollo y determine quién tendrá la responsabilidad de asignar roles específicos a los usuarios
  • 13. Control de Acceso Basado en Roles El acceso basado en roles se refiere a los permisos de acceso que se pueden asignar a un usuario o grupo de usuarios en una aplicación. Estos pueden ser, agregar nuevo, editar, modificar y borrar un registro. Poder acceder un formulario, entre otros. El uso de roles nos permite: 1. Proporcionar acceso exclusivo a usuarios específicos. 2. Agregar, cambiar o retirar fácilmente los permisos de acceso a usuarios. 3. Reduce la posibilidad de cometer errores al asignar permisos a un usuario.
  • 14. Single sign-on(Autenticación única) Single sign-on se refiere a la capacidad de que los usuarios se autentiquen una sola vez al inicio de una sesión y posteriormente puedan utilizar varias aplicaciones sin necesidad de estarse autenticando para cada una.
  • 16. 1. Autenticación básica 2. Autenticación basada en formulario 3. Autenticación Digest 4. Autenticación basada en Token 5. Otras
  • 17. La autenticación básica y la autenticación basada en formularios no son mecanismos de autenticación muy seguros. La autenticación básica envía usuario y contraseña a través de Internet como texto codificado en Base64. La autenticación basada en formularios envía estos datos como texto plano(plain text).
  • 18. Estas formas de autenticación dejan los datos del usuario expuestos y vulnerables. Si alguien puede interceptar la transmisión, el nombre de usuario y la información de contraseña se pueden decodificar fácilmente. Sin embargo, cuando se utiliza un mecanismo de transporte seguro, como SSL, o seguridad a nivel de red, como el protocolo IPsec o una VPN, junto con la autenticación básica o basada en formularios, algunas de estas preocupaciones pueden aliviarse.
  • 20. Autenticación Digest Al igual que la autenticación básica, la autenticación Digest autentica a un usuario en función de un nombre de usuario y una contraseña. Sin embargo, a diferencia de la autenticación básica, la autenticación de Digest no envía contraseñas de usuario a través de la red. En cambio, el cliente envía un hash criptográfico unidireccional de la contraseña y datos adicionales. Aunque las contraseñas no se envían, requiere que el equivalente de contraseña de texto plano esté disponible para que el contenedor de autenticación pueda validar los autenticadores recibidos calculando el digest esperado.
  • 21. Los métodos anteriores de autenticación nos obligan a tener que enfrentarnos a una serie de desafios tales como : manejo de sesiones, escalabilidad, cross-origin resource sharing (CORS) y cross-site request forgery (CSRF). Con estos problemas, siendo la escalabilidad el principal ya que las sesiones están almacenada en memoria, fue necesario probar un nuevo enfoque diferente, la autenticación basada en Token.
  • 22. Autenticación basada en Token La autenticación basada en tokens es una técnica de seguridad que autentica a los usuarios que intentan iniciar sesión en un servidor, una red u otro sistema seguro, utilizando un token de seguridad proporcionado por el servidor. Una autenticación es exitosa si un usuario puede demostrar a un servidor que él o ella es un usuario válido al pasar un token de seguridad. El servicio valida el token de seguridad y procesa la solicitud del usuario.
  • 23. Autenticación basada en Token Una vez que el token es validado por el servicio, se utiliza para establecer el contexto de seguridad para el cliente, de modo que el servicio pueda tomar decisiones de autorización o auditar la actividad para las sucesivas solicitudes de los usuarios.
  • 25. Autenticación basada en Token La autenticación basada en tokens es importante en todas partes en la web hoy en día. Con la mayoría de las compañías web que usan una API, los tokens son la mejor manera de manejar la autenticación para múltiples usuarios. Como los tokens son almacenados en el lado del cliente, no hay información de estado y la aplicación se vuelve totalmente escalable. Podemos usar el mismo API para diferentes apliaciones (Web, Mobile, Android, iOS, ...) solo debemos preocuparnos de enviar los datos en formato JSON y generar y descrifrar tokens en la autenticación y posteriores peticiones HTTP a través de un middleware.
  • 26. Autenticación basada en Token También nos añade más seguridad. Al no utilizar cookies para almacenar la información del usuario, podemos evitar ataques CSRF (Cross-Site Request Forgery) que manipulen la sesión que se envía al backend. Por supuesto podemos hacer que el token expire después de un tiempo lo que le añade una capa extra de seguridad.
  • 27. ¿Quién usa la autenticación basada en tokens? Cualquier API o aplicación web importante que haya encontrado probablemente haya usado tokens. Las aplicaciones como Facebook, Twitter, Google+, GitHub y muchas más usan tokens.
  • 28. JSON Web Tokens JSON Web Token, comúnmente conocidos como JWT, es un estándar abierto (RFC 7519) que define un modo compacto y autónomo para transmitir de forma segura la información entre las partes como un objeto JSON. JWT define un formato estandar para autenticación y autorización de los usuarios en las aplicaciones. Su utilización ha ganado popularidad en los últimos años porque permite que los servidores acepten solicitudes simplemente validando el contenido de estos JWTS.
  • 29. JSON Web Tokens Es decir, las aplicaciones que usan JWTS ya no tienen que contener cookies u otros datos de sesión sobre sus usuarios. Esta característica facilita la escalabilidad mientras mantiene las aplicaciones seguras.
  • 30. JSON Web Tokens ● Autenticación y autorización basada en Token ● Compactible con OpenId ● JWT -> RFC 7519 (Estandar abierto)
  • 31. JSON Web Token El formato de un JWT está compuesto por 3 strings separados por un punto . algo así como: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaW F0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c Cada string significa una cosa: Header, Payload y Signature.
  • 32. JSON Web Token Header La primera parte es la cabecera del token, que a su vez tiene otras dos partes, el tipo, en este caso un JWT y la codificación utilizada. Comunmente es el algoritmo HMAC SHA256, El contenido sin codificar es el siguiente: { "typ": "JWT", "alg": "HS256 } Codificado sería: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
  • 33. JSON Web Token Payload El Payload está compuesto por los llamados JWT Claims donde irán colocados la atributos que definen nuestro token. Exiten varios que puedes consultar aquí, los más comunes a utilizar son: { "sub": "54a8ce618e91b0b13665e2f9", "iat": "1424180484", "exp": "1425390142" }
  • 34. JSON Web Token Payload sub: Identifica el sujeto del token, por ejemplo un identificador de usuario. iat: Identifica la fecha de creación del token, válido para si queremos ponerle una fecha de caducidad. En formato de tiempo UNIX. exp: Identifica a la fecha de expiración del token. Podemos calcularla a partir del iat. También en formato de tiempo UNIX.
  • 35. JSON Web Token También podemos añadirle más campos, incluso personalizados, como pueden ser el rol del usuario, etc. { "sub": "54a8ce618e91b0b13665e2f9", "iat": "1424180484", "exp": "1425390142", "admin": true, "role": 1 } Codificado sería: eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
  • 36. JSON Web Token Signature La firma es la tercera y última parte del JSON Web Token. Está formada por los anteriores componentes (Header y Payload) cifrados en Base64 con una clave secreta (almacenada en nuestro backend). Así sirve de Hash para comprobar que todo está bien. HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret ); Codificado sería: SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
  • 37. JSON Web Token Signature Por tanto, todo nuestro JSON Web Token, una vez codificado tendrá esta formato: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZS I6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf 36POk6yJV_adQssw5c Si lo comprobamos en la web JWT.io vemos que lo traduce a los campos que hemos visto.
  • 38. Mecanismo de Autenticación en Java En la mayoría de contendores web Java y servidores de aplicaciones podemos encontrar los siguientes mecanismo de autenticación. Servlet Java EE Security (Java EE 8 / Jakarta EE) BASIC BASIC FORM FORM DIGEST Custom FORM MicroProfile JWT (Disponible en Payara Server / Payara Micro, RedHat Thorntail v2 & Quarkus, Open Liberty, Kumuluzee, Oracle Helidon, entre otros )
  • 39. Validación de un JWT en Java (JJWT) import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; byte[] key = getSignatureKey(); String jwt = Jwts.builder().setIssuer("http://trustyapp.com/") .setSubject("users/1300819380") .setExpiration(expirationDate) .put("scope", "self api/buy") .signWith(SignatureAlgorithm.HS256,key) .compact();
  • 40. Desafíos que enfrentamos al momento de aplicar un mecanismo de seguridad
  • 41. Desafíos Cómo puedo aplicar "correctamente": ¿Gestionar de forma segura las identidades de los usuarios? ¿Aplicar patrones de seguridad sin reinventar la rueda? ¿Asegurar mis aplicaciones web / servicios web / micro servicios con riesgos mínimos? ¿Reducir el impacto en el rendimiento en entornos de alta disponibilidad? Plataforma de Manejo de Identidad al Rescate !!
  • 42. Plataforma de Manejo de Identidad ● ¡Se te quitan los desafíos de seguridad! ● La gestión de la dentidad es la principal preocupación. ● Actualizaciones periódicas sobre vulnerabilidades conocidas. ● Cumple con el conjunto de estándares OpenID
  • 43. Plataforma de Manejo de Identidad Soluciones populares: ❖ Auth0 ❖ Okta ❖ Keycloak ❖ Oracle Identity Management ❖ ForgeRock
  • 47. Asuntos Legales Todas las marcas registradas, así como todos los logotipos, imágenes, fotografías, audio y vídeos mostrados en esta presentación son propiedad de sus respectivos propietarios y/o representantes. Su utilización es solamente para fines ilustrativos.
  • 49. @eudriscabrera @eudris @ecabrerar @eudriscabrera Eudris Cabrera Rodríguez Ingeniero Telemático Desarrollador de Software / Consultor Informático eudris@gmail.com https://www.linkedin.com/in/eudriscabrera http://www.slideshare.net/eudris https://twitter.com/eudriscabrera https://github.com/ecabrerar