Taller de Sistemas de Computación 2016

(Diferencias entre revisiones)
Saltar a: navegación, buscar
(JSON web tokens (JWT)
(¿Por qué utilizar JWT sobre SWT (Simple Web Tokens) y SAML (Security Assertion Markup Language Tokens))
Línea 361: Línea 361:
 
[[Archivo:jwt-flujo.jpg]]
 
[[Archivo:jwt-flujo.jpg]]
  
=== ¿Por qué utilizar JWT sobre SWT (Simple Web Tokens) y SAML (Security Assertion Markup Language Tokens) ===
+
=== ¿Por qué utilizar JWT sobre SWT (Simple Web Tokens) y SAML (Security Assertion Markup Language Tokens)? ===
 
Hablemos de las ventajas de JSON Web Tokens (JWT) comparándolo con Tokens Web Simple (SWT) y Security Assertion Markup Language Tokens (SAML).
 
Hablemos de las ventajas de JSON Web Tokens (JWT) comparándolo con Tokens Web Simple (SWT) y Security Assertion Markup Language Tokens (SAML).
  
Como JSON es menos detallado que XML, cuando está codificado, su tamaño también es más pequeño; Haciendo JWT más compacto que SAML. Esto hace que JWT sea una buena opción para pasar en entornos HTML y HTTP.
+
*Como JSON es menos detallado que XML, cuando está codificado, su tamaño también es más pequeño; Haciendo JWT más compacto que SAML. Esto hace que JWT sea una buena opción para pasar en entornos HTML y HTTP.
  
En cuanto a la seguridad, SWT sólo puede ser simétrico firmado por un secreto compartido utilizando el algoritmo HMAC. Mientras que los tokens JWT y SAML también pueden usar un par de claves públicas/privadas en forma de un certificado X.509 para firmarlos. Sin embargo, la firma de XML con XML Digital Signature es muy difícil en comparación con la simplicidad de la firma de JSON.
+
*En cuanto a la seguridad, SWT sólo puede ser firmado utilizando el algoritmo HMAC. Mientras que los tokens JWT y SAML también pueden usar un par de claves públicas/privadas en forma de un certificado X.509 para firmarlos. Sin embargo, la firma de XML con XML Digital Signature es muy difícil en comparación con la simplicidad de la firma de JSON.
  
Los analizadores JSON son comunes en la mayoría de los lenguajes de programación, ya que se asignan directamente a los objetos; por el contrario, XML no tiene una asignación de documento a objeto natural. Esto hace que sea más fácil trabajar con JWT que las aserciones de SAML.
+
*Los analizadores JSON son comunes en la mayoría de los lenguajes de programación, ya que se asignan directamente a los objetos; por el contrario, XML no tiene una asignación de documento a objeto natural. Esto hace que sea más fácil trabajar con JWT que las aserciones de SAML.
  
En cuanto al uso, JWT se utiliza en una escala de Internet. Esto pone de relieve la facilidad de procesamiento del lado del cliente de JWTs en múltiples plataformas, especialmente móviles.
+
*En cuanto al uso, JWT se utiliza en una escala de Internet. Esto pone de relieve la facilidad de procesamiento del lado del cliente de JWTs en múltiples plataformas, especialmente móviles.
 +
 
 +
=== ¿Cómo usamos JSON Web Tokens en Auth? ===
 +
En Auth0, emitimos JWTs como resultado del proceso de autenticación. Cuando el usuario inicia sesión con Auth0, se crea un JWT, se firma y se envía al usuario. Auth0 soporta la firma de JWT con algoritmos HMAC y RSA. Este símbolo se utilizará entonces para autenticar y autorizar con API que otorgarán acceso a sus rutas y recursos protegidos.
 +
 
 +
También usamos JWTs para realizar autenticación y autorización en la API v2 de Auth0, reemplazando el uso tradicional de las claves API opacas regulares. En cuanto a la autorización, JSON Web Tokens permite la seguridad granular, que es la capacidad de especificar un determinado conjunto de permisos en el token, lo que mejora la depuración.

Revisión de 17:24 29 nov 2016

Contenido

Temas de Investigación

Configuración de SELinux para servicios HTTP

La configuración de SElinux para APACHE y NGINX se encuentra directamente en el tema 6.1. Además, en el tema 6.2 se encuentra la respectiva configuración para algunas bases de datos que se encuentren en un sistema con SElinux activado.

Patrón MVC en Ruby on Rails

Grupo 14
  • Carlos Bugueño
  • Eduardo Ramírez
  • Oscar Duarte

Arquitectura MVC

MVC es un patrón de arquitectura de software que se centra principalmente en la separación del código en 3 areas: Modelo, Vista y Controlador. El Modelo se encarga de representar y manipular los datos de la aplicación, es decir, tiene directa relación con la base de datos. La vista se encarga de mostrar los datos al usuario de una forma adecuada y recibir también el input. El controlador actúa como intermediario entre ambas entidades. Una consulta de un usuario a un sistema Rails, que sigue el patrón MVC, tiene el siguiente flujo [1]:

Flujo de consulta en Arquitectura MVC
  1. Un usuario, a traves de un navegador, hace la consulta al servidor, como por ejemplo http://sitio.com/usuario/mostrar/2
  2. El servidor usa el archivo de rutas de Rails para saber que Controlador usar y le envía los parámetros y datos en la consulta
  3. El Controlador recibe los datos y ejecuta el método correspondiente, haciendo llamada a algún Modelo
  4. El Modelo ejecuta la lógica necesaria para completar la consulta y se conecta con la base de datos (DBMS)
  5. El Controlador recibe el output del modelo y envía lo correspondiente a la Vista
  6. La Vista lo ordena en HTML y finalmente el controlador le envía al servidor la página con el output formateado
  7. El servidor envía la respuesta al navegador quien la parsea y muestra al usuario

Modelos

Los Modelos representan en Rails la capa de abstracción y acceso de datos [2]. Se representan en Rails con clases que heredan de ActiveRecord::Base. Eso faculta a la clase para comunicarse directamente con los datos. Cada método debe relacionarse con algún tipo de consulta a la BD. Por ejemplo el método User.getAllWithJob debe realizar todo el proceso para obtener todos los usuarios que tengan trabajo. Cada clase mapea una entidad de la base de datos, es decir, una tabla. Por ejemplo la tabla users será mapeada a la clase User. Por convención de Rails las tablas son con plural y minúscula, mientras que las clases en singular y mayúscula. Cabe mencionar que el framework tiene como parte de la filosofía la "Convención por sobre la Configuración" [3].

Ejemplo de definición de Modelo simple

Uso de Modelos

Rails genera métodos CRUD (Create, Read, Update and Delete) automáticamente en base a los atributos de las entidades [4], por ejemplo si la entidad tiene un atributo name existirá el método find_by_name, con el que se podrá filtrar según nombre en la tabla. Las clases de modelos ya tienen varios métodos que facilitan mucho las tareas esenciales con datos de BDs. Estos métodos son los que vienen definidos en los ActiveRecord. Como se ve en el ejemplo la nueva instancia de User esta mapeado a un nuevo registro de la base de datos pero que aún no se guarda. Se le pueden hacer todo tipo de modificaciones para luego guardarse con save. También se puede manipular el registro directamente modificando el o los objetos obtenidos como resultado de una consulta.

Ejemplo de uso de un Modelo

Asociaciones

En Rails, las relaciones entre entidades del modelo de datos son expresadas a través de Asociaciones. La existencia de relaciones bien definidas dentro de los modelos es esencial para facilitar las consultas que requieran más de una entidad, por ejemplo, obtener todos los cursos que dicta un profesor. Esto se lograría fácilmente con profesor.cursos . Las asociaciones más comunes son

  • belongs_to: cada instancia del modelo "pertenece" a una instancia del otro modelo
  • has_one: cada instancia de un modelo contiene o posee una instancia de otro modelo
  • has_many: Asociación del tipo uno es a muchos
  • has_and_belongs_to_many: Asociación del tipo muchos a muchos
Asociaciones (y otros métodos) dentro de un Modelo

Controladores

Los controles hacen de interfaz entre el Modelo y las Vistas [5]. Se encargan de tomar y filtrar parámetros pasados por GET y POST. También maneja las cookies y todo lo relacionado con la autenticación y seguridad de las sesiones. Se encarga de empaquetar datos para enviar a la vista y redirigir a las vistas correspondientes.

El Router de Rails se encarga de redireccionar una consulta de un servidor al Controlador y método correspondiente en base al archivo de rutas del sistema. Por ejemplo la linea GET '/notes/:id' => 'notes#show' indica que una consulta del GET a la URL sistema.cl/notes/2 debe ser manejada por el controlador de las notas, es decir, NotesController (por convención) y a su vez por el método show definido en este. Además se le entregará al controlador el id en cuestión por parámetro.

Ejemplo de Controlador en Rails

Vistas

Las Vistas muestran el resultado de todo el procesamiento de una consulta [6]. Rails usa archivos .html.erb para permitir código Ruby mezclado con HTML. Es altamente no recomendado realizar cualquier tipo de procesamiento de datos en las Vistas, para mantener el patrón MVC intacto. Solo se recomienda usar lo necesario para iterar sobre estructuras con los datos a mostrar. Todo el código pesado debe en los Controladores y Modelos. Los datos a mostrar deben ser enviados a la vista especificando los nombres de las variables con un "@", por ejemplo "@usuarios". Luego en la Vista se puede escribir código Ruby dentro de <%  %> o en caso de ser necesario escribir el output del código en la pagina web se usa <%=  %>

Muchas vistas son creadas automáticamente por el framework producto de la generación de Controladores con los comandos por consola, lo que facilita mucho el desarrollo. Así, al especificar que un Controlador tiene el método show, se crea la ruta y la vista para show.

Ejemplo de Vista en Rails

Bibliografía

1. Flujo general dentro de un sistema Ruby on Rails, http://ruby.about.com/od/rubyonrails/ss/Rails-Application-Flow.htm

2. AciveRecord, capa de datos en Rails, http://guides.rubyonrails.org/active_record_basics.html

3. Convención sobre Configuración en Rails, http://guides.rubyonrails.org/active_record_basics.html#convention-over-configuration-in-active-record

4. CRUD en Rails, http://guides.rubyonrails.org/active_record_basics.html#crud-reading-and-writing-data

5. Controladores en Rails, http://guides.rubyonrails.org/action_controller_overview.html

6. Vistas en Rails, http://guides.rubyonrails.org/layouts_and_rendering.html

Patrón MVC en Django

Grupo 5
  • Daniel Quinteros
  • Fernando Iturbe
  • Iván Lazo

¿Qué es MVC?

El modelo–vista–controlador (MVC) es un patrón de arquitectura de software, que separa los datos y la lógica de negocio de una aplicación de la interfaz de usuario y el módulo encargado de gestionar los eventos y las comunicaciones. Para ello MVC propone la construcción de tres componentes distintos que son el modelo, la vista y el controlador, es decir, por un lado define componentes para la representación de la información (modelo), y por otro lado para la interacción (controlador) del usuario (vista).

Este patrón de arquitectura de software se basa en las ideas de reutilización de código y la separación de conceptos, características que buscan facilitar la tarea de desarrollo de aplicaciones y su posterior mantenimiento [7]

  • Modelo se refiere a la capa de acceso de datos
  • Vista se refiere a la parte del sistema que selecciona qué mostrar y cómo mostrar
  • Controlador se refiere a la parte del sistema que decide qué mostrar al usuario, dependiendo de la entrada, y se encarga del acceso al modelo según sea necesario.

En Django

Un proyecto es una instancia de un cierto conjunto de aplicaciones de Django, más las configuraciones de esas aplicaciones. Una aplicación es un conjunto portable de una funcionalidad de Django, típicamente incluye modelos y vistas, que conviven en un solo paquete de Python. La “vista” describe el dato que es presentado al usuario. No es necesariamente cómo se ve el dato, sino qué dato se muestra. La vista describe cuál dato ve, no cómo lo ve. Es una distinción sutil. Así pues, una “vista” es la función de callback en Python para una URL en particular, porque esta función describe cuál dato es presentado. Además, es sensato separar el contenido de la presentación que es donde entran las plantillas. En Django, una “vista” describe cual dato es presentado, pero una vista normalmente lo delega a una plantilla, la cual describe cómo se presenta el dato. [8]


Funcionamiento del MTV de Django


Modelo

Modelo en Django

Es la representación de la información (una interfaz de la data) Esto abarca la base de datos en conjunto con el código en Python para el manejo de clases, que encaja completamente con la estructura de las bases de datos. El modelo define los datos almacenados, se encuentra en forma de clases de Python.

Una clase que hereda de object y que al crearse una instancia se inicia en 0,0. Todos los métodos de clase reciben como primer parámetro “self” [9]. Además, como se puede ver antes, las clases se pueden heredar, etc.

Una vez definidos nuestro modelos (ORM, mapeo objeto-relacional) hacemos una migración, básicamente es decirle a django que hay cambios y que los ejecute (makemigrations identifica cambios, los informa y crea la migración, por decirlo de alguna forma “escribe el sql a ejecutar”, luego migrate realiza los cambios - migraciones - preparados).

Una vez creados los modelos Django provee una API para manejarlos (crear, recuperar, actualizar y eliminar - CRUD: create, retrieve, update and delete usando Manager - interface que provee operaciones de consulta a la BD) [14]

Controlador

Controlador en Django

El controlador es el corazón del sistema, maneja pedidos y respuestas, Controla el flujo de la información entre el modelo y la vista, es decir, maneja la información que es pasada hacia la base de datos y la cual es pasada a la vista.

Una “view” es donde está la lógica de la aplicación, la cual requiere información desde el modelo, el cual da una respuesta que puede ser un HTML, un error o un documento XML. El archivo a que se utiliza es views.py.

Para determinar qué view utilizar se hace uso del urlresolver, basado en las expresiones regulares URLS en python.

  • ^ denota el principio del texto
  • $ denota el final del texto
  • \d representa un dígito
  • + indica que el ítem anterior debería ser repetido por lo menos una vez
  • * indica que el ítem anterior debería ser repetido 0 o más veces
  • ( ) para encerrar una parte del patrón
QuerySet

Un QuerySet es una lista de objetos de un modelo determinado, que permite leer, filtrar y ordenar datos de una base de datos. [15]

QuerySet API reference [16]
  • Métodos que retornan nuevas QuerySets
  • Métodos que no retornan QuerySets
  • Búsqueda de campos (WHERE clause)


Vista (Template)

TemplateTags en Django

Es la interfaz de usuario, Django separa la vista en dos, la parte HTML y el código python (llamadas views) que lo renderiza. Por defecto trae una interfaz de administrador con la capacidad de editar (CRUD) los modelos generados. Se le llama Plantilla o Template. Es un puente entre controlador y el navegador (por eso se le suele llamar MTV) por lo que el controlador sería View.

Una plantilla es un archivo que podemos reutilizar para presentar una gran cantidad de información de una forma consistente. Esto es exactamente lo que las views se supone que hacen: conectar modelos con plantillas. Importamos los modelos a las vistas, mediante los queryset (conjunto de consultas)

Template Tags

En HTML no podemos poner código Python, ya que los navegadores sólo interpretan HTML. Por otra parte, HTML es un lenguaje estático, mientras que Python es dinámico, por lo tanto, Django implementa los template tags, estos nos permiten transferir cosas de Python como cosas en HTML.


Funcionamiento del MTV de Django


Bibliografía

1. Django: Hello World - MVC - 2016. (2016). Bogotobogo.com. Retrieved 11 October 2016, from http://www.bogotobogo.com/python/Django/Python_Django_MVC_Model_View_Controller_Framework.php

2. FAQ: General | Django documentation | Django. (2016). Docs.djangoproject.com. Retrieved 11 October 2016, from https://docs.djangoproject.com/es/1.10/faq/general/#django-appears-to-be-a-mvc-framework-but-you-call-the-controller-the-view-and-the-view-the-template-how-come-you-don-t-use-the-standard-names

3. Definiendo nuevos tipos (Algoritmos de Programación con Python). (2016). Librosweb.es. Retrieved 11 October 2016, from http://librosweb.es/libro/algoritmos_python/capitulo_14/definiendo_nuevos_tipos.html

4. Model field reference | Django documentation | Django. (2016). Docs.djangoproject.com. Retrieved 13 October 2016, from https://docs.djangoproject.com/en/1.8/ref/models/fields/#field-options

5. Model field reference | Django documentation | Django. (2016). Docs.djangoproject.com. Retrieved 13 October 2016, from https://docs.djangoproject.com/en/1.8/ref/models/fields/#field-types

6. Model field reference | Django documentation | Django. (2016). Docs.djangoproject.com. Retrieved 13 October 2016, from https://docs.djangoproject.com/en/1.8/ref/models/fields/#module-django.db.models.fields.related

7. Model field reference | Django documentation | Django. (2016). Docs.djangoproject.com. Retrieved 13 October 2016, from https://docs.djangoproject.com/en/1.8/ref/models/fields/#attributes-for-fields

8. Model instance reference | Django documentation | Django. (2016). Docs.djangoproject.com. Retrieved 14 October 2016, from https://docs.djangoproject.com/en/1.8/ref/models/instances/

9. Django ORM (Querysets) · Django Girls Tutorial. (2016). Tutorial.djangogirls.org. Retrieved 13 October 2016, from https://tutorial.djangogirls.org/en/django_orm/

10. QuerySet API reference | Django documentation | Django. (2016). Docs.djangoproject.com. Retrieved 13 October 2016, from https://docs.djangoproject.com/en/1.8/ref/models/querysets/

RESTful APIs en Ruby on Rails

RESTful APIs en Django

Herramientas de gestión de proyectos

Grupo 13
  • Laura Bermeo
  • Renata Mella
  • Ian Zamorano

Algunas herramientas

Cuando se trabaja en equipo sobre un proyecto, es útil contar con ciertas herramientas que resuelvan el problema de organización y planificación, junto con facilitar instancias en donde los integrantes del equipo trabajan al mismo tiempo pero no necesariamente en el mismo lugar. Se presentarán las siguientes herramientas: Trello, un gestor de tareas para el trabajo colaborativo; Slack, una aplicación de mensajería para equipos; JIRA, una herramienta para bug tracking, issue tracking y gestión de proyectos.

Trello

Trello [17] es un gestor de tareas pensado para el trabajo colaborativo. Tiene tableros como elementos centrales y columnas con notas. Está basado en kanban para organizar el estado de las tareas.

Trello.png

Características

  • Ofrece notas, listas, comentarios, notificaciones, calendario además de adjuntar imágenes y archivos.
  • Integración con múltiples herramientas de trabajos (como Calendar, Dropbox, Drive, GitHub, Twitter, Evernote entre otros).

Ventajas

  • Es sencillo de usar, solo es necesario familiarizarse con elementos como el tablero y columnas para editar; las notas y opciones adicionales son similares en otras herramientas.
  • Posee una aplicación móvil, donde puedes visualizar y editar sin necesidad de entrar al computador.
  • Tiene una versión gratuita.

Desventajas

  • No tiene un sistema de chat entre los miembros.
  • La versión pagada es bastante cara ($50 USD mensual por equipo).
  • La versión gratis suele servir solo en trabajos pequeños.

Algunas empresas que utilizan esta herramienta

Slack

Slack [20] es una aplicación de mensajería de escritorio y móvil para equipos. Junta toda la comunicación y archivos del equipo en un solo lugar.

Slack.png

Características

  • Es un sistema de mensajería.
  • Incluye integración con diversas herramientas de trabajo (como Dropbox, GitHub, Twitter, entre otros).
  • Organiza las conversaciones en canales.
  • Está la opción de crear salas de chat privadas con acceso permitido solo a miembros elegidos.
  • Existe la versión gratis, estándar (USD$6.67 por mes por miembro) y plus (USD$12.50 por mes por miembro).

Ventajas

  • Se pueden compartir archivos y realizar una búsqueda tanto en sus títulos como en sus contenidos.
  • Comunicación inter-organizacional.
  • Entrega orden y disciplina gracias a la separación por canales.
  • Se tiene acceso a los mensajes y archivos aun estando offline.
  • Existen múltiples aplicaciones y bots disponibles para integrar a Slack.

Desventajas

  • No tiene sistema de recordatorios; para ello se debe usar la integración de aplicaciones y elegir alguna externa a Slack.
  • La versión gratis tiene muchas limitaciones (hasta 5GB de almacenamiento por equipo, falta de llamadas grupales, solo guarda hasta 10.000 mensajes antiguos, entre otros).
  • Hay que tener cuidado de mantener el orden y no recargar de canales al equipo.

Algunas empresas que utilizan esta herramienta

  • IceCube Collaboration [21]
  • charity: water [22]
  • El equipo tras el explorador de Marte, Curiosity [23]

JIRA

JIRA [24] es una herramienta desarrollada por la compañía australiana Atlassian. Es utilizada para bug tracking, issue tracking y gestión de proyectos.

JIRA.png

Características

  • Incluye tableros Scrums y tableros Kanban.
  • Reportes Ágiles.
  • Admite planeación de Portafolios.
  • Gestión de Proyectos.

Ventajas

  • Se adapta a los diferentes métodos de desarrollo que existen en el ámbito del desarrollo de software.
  • Tiene una herramienta llamada Confluence, donde se pueden tomar notas de una reunión, agregar requerimientos de un producto, registrar decisiones, crear un blog con noticias, hacer retrospectivas del trabajo, entre otras cosas.
  • La gestión de personal (confluence) está separada de la gestión de proyectos (JIRA).
  • Existe gran variedad de herramientas para integrar junto a JIRA.

Desventajas

  • Es complicado de utilizar para un usuario nuevo.
  • Es pagada. Su valor es de $10 USD para equipos de hasta 10 personas y $75 USD para equipos de 15 integrantes. Tiene una prueba gratis de 7 días.
  • La integración con otras aplicaciones es pagada (el precio varía según la aplicación).

Algunas empresas que utilizan esta herramienta



JSON web tokens (JWT

Grupo 11
  • Sergio Herrera
  • Inti Pontt

¿Qué es JWT (JSON Web Token)?

-Es un estándar de autenticación basado en JSON -Lo podemos utilizar en muchos lenguajes Ruby, Elixir, Node.js, Python, PHP, .NET, Java, Clojure, ClojureScript, etc. -Patrocinado por grandes empresas del sector tecnológico (como Google, Microsoft, Facebook, etc). -En simples palabras, toma un conjunto de datos json y los encripta para ser transmitidos como una cadena de caracteres encriptados.

Formato token JWT

3 cadenas de caracteres separados por un punto.

  • Header: Cabecera del token, compuesta de 2 partes
  1. Tipo (en este caso JWT)
  2. Codificación utilizada (Comúnmente es el algoritmo HMAC SHA256)
Ejemplo de cabecera sin codificar
{
    “alg”: “HS256”,
    “typ”: “JWT”
}
Luego de codificar, es la primera parte de la cadena antes del punto:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
  • Payload: aqui van los atributos que definen al token. Los más comunes a utilizar son:
    • 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.
  • Signature:
Esta firma está formada por los anteriores componentes (Header y Payload) cifrados en Base64 con una clave secreta (un secreto almacenada en nuestro servidor). Así sirve de Hash para comprobar que todo está bien.

Podemos jugar a crear nuestros propios token en la siguiente página https://jwt.io/

¿Por qué utilizar JWT?

La mayoría de las aplicaciones actuales consumen servicios rest y están alojadas en distintos dominios con lo cuál no podemos trabajar con sesiones ya que se almacenan en este.

Podemos decir que la mejor alternativa es llevar a cabo la autenticación haciendo uso de tokens que vayan del servidor al cliente, un usuario hace login (no necesita enviar token porque no lo tiene), una vez el servidor de ok retorna un token cómo respuesta y el usuario debe enviar dicho token en las siguientes peticiones para poder acceder a los recursos del servicio.

En cada petición el servidor debe comprobar el token proporcionado por el usuario y si es correcto podrá acceder a los recursos solicitados, de otra forma deberá denegar la petición.

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.

Flujo tipico

  1. El Usuario ingresa sus credenciales.
  2. En el Servidor son verificadas contra un almacenamiento o servicio, pero en lugar de crear una sesión y retornar un cookie, retornará un objeto JSON que contiene un JWT.
  3. El Cliente recibe el objeto JSON con el JWT y es almacenado. Normalmente en el almacenamiento local.
  4. Este JWT almacenado es enviado por el Cliente al Servidor para acceder a rutas protegidas.
  5. El Servidor en el API esperan u chequean un JWT válido y si hay uno, procederán la petición y retornará la respuesta esperada.
  • Dado que la información del usuario está contenida dentro del JWT, no hay necesidad de validar el usuario en la Base de Datos, lo cual disminuye la latencia de la aplicación.
  • Resaltaremos que el estado del usuario nunca es almacenado en la memoria del servidor, lo cual significa que el usuario no está autenticado en el sentido tradicional. Sin embargo, un JWT válido le da al usuario la llave para acceder a los datos cada vez que hace una petición, de esta manera es implementada la autenticación sin estado.

Jwt-flujo.jpg

¿Por qué utilizar JWT sobre SWT (Simple Web Tokens) y SAML (Security Assertion Markup Language Tokens)?

Hablemos de las ventajas de JSON Web Tokens (JWT) comparándolo con Tokens Web Simple (SWT) y Security Assertion Markup Language Tokens (SAML).

  • Como JSON es menos detallado que XML, cuando está codificado, su tamaño también es más pequeño; Haciendo JWT más compacto que SAML. Esto hace que JWT sea una buena opción para pasar en entornos HTML y HTTP.
  • En cuanto a la seguridad, SWT sólo puede ser firmado utilizando el algoritmo HMAC. Mientras que los tokens JWT y SAML también pueden usar un par de claves públicas/privadas en forma de un certificado X.509 para firmarlos. Sin embargo, la firma de XML con XML Digital Signature es muy difícil en comparación con la simplicidad de la firma de JSON.
  • Los analizadores JSON son comunes en la mayoría de los lenguajes de programación, ya que se asignan directamente a los objetos; por el contrario, XML no tiene una asignación de documento a objeto natural. Esto hace que sea más fácil trabajar con JWT que las aserciones de SAML.
  • En cuanto al uso, JWT se utiliza en una escala de Internet. Esto pone de relieve la facilidad de procesamiento del lado del cliente de JWTs en múltiples plataformas, especialmente móviles.

¿Cómo usamos JSON Web Tokens en Auth?

En Auth0, emitimos JWTs como resultado del proceso de autenticación. Cuando el usuario inicia sesión con Auth0, se crea un JWT, se firma y se envía al usuario. Auth0 soporta la firma de JWT con algoritmos HMAC y RSA. Este símbolo se utilizará entonces para autenticar y autorizar con API que otorgarán acceso a sus rutas y recursos protegidos.

También usamos JWTs para realizar autenticación y autorización en la API v2 de Auth0, reemplazando el uso tradicional de las claves API opacas regulares. En cuanto a la autorización, JSON Web Tokens permite la seguridad granular, que es la capacidad de especificar un determinado conjunto de permisos en el token, lo que mejora la depuración.

Herramientas personales
Espacios de nombres
Variantes
Acciones
Navegación
Herramientas