Video Summary and Transcription
Esta charla relámpago explora cómo asegurar los puntos finales de GraphQL utilizando Tyk, abordando problemas como la autorización, la seguridad del esquema y la protección contra ataques de denegación de servicio. Tyk proporciona funciones de seguridad completas sin necesidad de complementos adicionales. Admite varios modos de autenticación, límites de velocidad, limitación de tráfico y límites de profundidad de consulta. La demostración muestra cómo Tyk y GraphQL pueden asegurar fácilmente las APIs mediante la adición de encabezados de autorización, la restricción de acceso a campos específicos y la imposición de límites de profundidad de consulta.
1. Introducción a la seguridad de los puntos finales de GraphQL
En esta charla relámpago, exploraremos cómo asegurar tus puntos finales de GraphQL en cinco minutos utilizando Tyke. Abordaremos problemas como agregar autorización, asegurar el esquema y protegernos contra ataques de denegación de servicio. Tyke proporciona seguridad completa, eliminando la necesidad de complementos adicionales. Demostraremos el proceso asegurando la API de países de TrevorBlades a través del proxy de Tyke.
Mi nombre es Matt Tanner. Soy un evangelista de productos aquí en Tyke, y voy a guiarlos a través de esto.
Entonces, yendo directo al grano, dado que tenemos un tiempo limitado, veamos algunos problemas que vamos a resolver al asegurar GraphQL. El primero es agregar autorización. Agregar rápidamente mecanismos de autorización, asegurar el esquema, asegurándonos de que solo usuarios específicos tengan acceso a campos específicos, y también ver cómo protegernos contra ataques de denegación de servicio. ¿Cómo lo hacemos? Bueno, tenemos seguridad completa, que es una frase que nos gusta usar en Tyke para decir que todo lo que está dentro de nuestra puerta de enlace está incluido. No hay complementos ni nada de eso que necesites agregar. Y para eso, lo vamos a agregar directamente. Luego, como parte de eso, vamos a agregar permisos basados en campos para asegurar el esquema, y también vamos a agregar límites de profundidad de consulta para esos ataques de denegación de servicio.
Veamos cómo funciona. Vamos a ir directamente a ello. Voy a salir de esto. Y aquí estoy en el panel de control de Tyke. Lo primero que voy a hacer es mostrarte lo que quiero asegurar. Hay esta API de países de TrevorBlades, una API de GraphQL, que en este momento está completamente abierta. Y puedo acceder a ella. No hay seguridad, ningún tipo de seguridad en absoluto. Lo que voy a hacer es hacer un proxy a través de Tyke y luego asegurarlo usando Tyke. Voy a copiar esto. Esto es como si fuera tu API. Vienes a Tyke y vamos a APIs. Agregar nueva API. La voy a llamar countries. Es una API de GraphQL. Vamos a hacer un proxy a un servicio de GraphQL existente, y verás que tengo la URL de países de TrevorBlades ahí. Ahora, en este punto, aunque no lo creas, ya tenemos algo de autorización incorporada. Ahora hemos hecho un proxy a ella. Si voy al playground, que está integrado en Tyke, y ejecuto, si simplemente oculto esto aquí, ocultar controles de reunión. Si vengo aquí y copio esta consulta, y vuelvo aquí y ejecuto esta consulta, verás que dice que falta el campo de autorización.
2. Securing GraphQL Endpoints
Soportamos varios modos de autenticación como tokens de autenticación, TLS mutuo, OAuth 2.0 y JOTS. Para acceder a la API, es necesario generar claves y crear una política. La política incluye configuraciones para limitar la velocidad, el throttle y la profundidad de la consulta. Se pueden establecer permisos basados en campos para restringir el acceso a campos específicos. Por último, se agregan claves a la política y se puede acceder al playground de proxy de GraphQL a través de la API.
¡Eso es genial! Eso significa que ya estamos aplicando un token de autenticación. ¿Dónde se especifica eso? Bueno, en nuestra configuración aquí abajo. Soportamos varias cosas diferentes, pero hoy vamos a usar tokens de autenticación solo por brevedad. También soportamos TLS mutuo, OAuth 2.0, JOTS, todos esos buenos modos de autenticación.
Para acceder a esto ahora, necesito generar algunas claves. Para tener claves, necesito crear una política. Vamos a guardar esto. Vamos a ir a políticas, que está aquí en la esquina. Agregar política. Voy a cubrir mi API de países. Vamos a ir a configuraciones aquí. Solo voy a llamar a esta política de países. Las claves que genero nunca van a caducar. Luego, voy a ir a derechos de acceso, y hay algunas cosas que vamos a hacer. Para establecer límites y cuotas por API, voy a activar esto. Esto nos permitiría aplicar límites de velocidad, throttle, cuotas de uso, todas esas cosas. No nos preocuparemos por eso hoy.
Lo que nos preocupa aquí es el límite de profundidad de consulta. Lo que voy a hacer es establecer la profundidad máxima de la consulta en cinco. Te lo demostraré en un momento. Con eso, ahora se aplicará. También voy a establecer permisos basados en campos para no permitir que ninguno de mis usuarios de esta política acceda. Como puedes ver, puedes ver todos los tipos disponibles a través de esta API, así como todos los campos individualmente. No quiero que tengan acceso al código de continente o al código de país. Luego voy a crear la política. Ahí vamos. La política ha sido creada, y ahora voy a ir a claves. Voy a agregar una clave para esta política, crear clave, y con eso, mi clave está creada. Ahora, si vuelvo a APIs, voy a abrir en una nueva pestaña, voy a ir a países, que es nuestro playground de proxy de GraphQL creado.
3. Securing APIs with Tyke and GraphQL
Agregué un encabezado de autorización con nuestra clave para emitir la consulta. Después de eliminar el campo bloqueado, ejecuté la consulta y obtuve acceso a la API utilizando el token de autenticación. A continuación, demostré la restricción de código en el tipo continente y tipo país. Luego, mostré la limitación de profundidad de consulta ejecutando una consulta anidada. Finalmente, eliminé los campos restringidos y recibí datos. Sin embargo, cuando intenté ir un nivel más profundo y consultar los nombres de los países, se superó el límite de profundidad. Esto demuestra lo fácil que es asegurar las APIs con Tyke y nuestras características de GraphQL.
Recuerda nuevamente que no pudimos emitir esa consulta. Voy a agregar un encabezado de solicitud con un encabezado de autorización que incluye nuestra clave. Voy a volver y tomar nuestra consulta que teníamos y la pegaré aquí. Y ahora simplemente voy a quitar el código porque bloqueamos ese campo y quería que esto funcionara. Y voy a ejecutar esto. Y como puedes ver, ahora tenemos acceso a la API. Estoy usando ese token de autenticación para acceder a ella.
Ahora agreguemos nuestro código, al cual no tenemos acceso. Entonces, código de países y continente, no tenemos acceso a estos campos. ¿Qué sucede si intento acceder a ellos? El código está restringido en el tipo continente, así que si lo elimino, luego mi código está restringido en el tipo país y puedo quitar eso y listo. Y ahora podré hacer eso.
Y por último, lo que quiero mostrarte es una consulta anidada y voy a demostrar la limitación de profundidad de consulta que hemos establecido aquí. Pegar esto aquí. Como puedes ver, tengo algunas redundancias en la consulta. Hago eso. Oh, necesito volver aquí y ejecutar esto. ¿Me falta otro corchete? Debe ser eso. Ahí vamos. Bien. Como puedes ver, el campo código está restringido en el tipo continente, así que simplemente vamos a eliminar eso rápidamente. Código, código, código. Ahora ejecutamos esto y obtenemos algunos data de vuelta. Ahora, ¿qué sucede si agrego uno más aquí y digo, países. ¿Puedo hacer name y ejecutar esto? Límite de profundidad excedido. Ahora puedes ver que a nivel de la puerta de enlace, incluso sin ir a ese servicio backend, las cosas se están cortando y así de fácil es asegurar las APIs con Tyke y nuestras características de GraphQL. Eso es todo. Muchas gracias.
Comments