Saltar al contenido

Seguridad

Hay muchas formas de manejar la seguridad, la autenticación y la autorización.

Y normalmente es un tema complejo y "difícil".

En muchos frameworks y sistemas, solo manejar la seguridad y la autenticación requiere una gran cantidad de esfuerzo y código (en muchos casos puede ser el 50% o más de todo el código escrito).

FastAPI proporciona varias herramientas para ayudarte a manejar la Seguridad de manera fácil, rápida y estandarizada, sin tener que estudiar y aprender todas las especificaciones de seguridad.

Pero primero, revisemos algunos conceptos pequeños.

¿Tienes prisa?

Si no te importan estos términos y solo necesitas agregar seguridad con autenticación basada en usuario y contraseña ahora mismo, salta a los siguientes capítulos.

OAuth2

OAuth2 es una especificación que define varias formas de manejar la autenticación y la autorización.

Es una especificación bastante extensa y cubre varios casos de uso complejos.

Incluye formas de autenticarse usando un "tercero".

Eso es lo que todos los sistemas con "iniciar sesión con Facebook, Google, X (Twitter), GitHub" usan por debajo.

OAuth 1

Hubo un OAuth 1, que es muy diferente de OAuth2, y más complejo, ya que incluía especificaciones directas sobre cómo encriptar la comunicación.

No es muy popular ni usado hoy en día.

OAuth2 no especifica cómo encriptar la comunicación, espera que tengas tu aplicación servida con HTTPS.

Consejo

En la sección sobre despliegue verás cómo configurar HTTPS gratis, usando Traefik y Let's Encrypt.

OpenID Connect

OpenID Connect es otra especificación, basada en OAuth2.

Simplemente extiende OAuth2 especificando algunas cosas que son relativamente ambiguas en OAuth2, para intentar hacerlo más interoperable.

Por ejemplo, el login de Google usa OpenID Connect (que por debajo usa OAuth2).

Pero el login de Facebook no soporta OpenID Connect. Tiene su propia variante de OAuth2.

OpenID (not "OpenID Connect")

También hubo una especificación "OpenID". Esta intentaba resolver lo mismo que OpenID Connect, pero no estaba basada en OAuth2.

Así que era un sistema adicional completo.

No es muy popular ni usado hoy en día.

OpenAPI

OpenAPI (anteriormente conocido como Swagger) es la especificación abierta para construir APIs (ahora parte de la Linux Foundation).

FastAPI está basado en OpenAPI.

Eso es lo que hace posible tener múltiples interfaces de documentación interactiva y automática, generación de código, etc.

OpenAPI tiene una forma de definir múltiples "esquemas" de seguridad.

Al usarlos, puedes aprovechar todas estas herramientas basadas en estándares, incluyendo estos sistemas de documentación interactiva.

OpenAPI define los siguientes esquemas de seguridad:

  • apiKey: an application specific key that can come from:
    • Un parámetro de query.
    • Un header.
    • Una cookie.
  • http: standard HTTP authentication systems, including:
    • bearer: un header Authorization con un valor de Bearer más un token. Esto se hereda de OAuth2.
    • Autenticación HTTP Basic.
    • HTTP Digest, etc.
  • oauth2: all the OAuth2 ways to handle security (called "flows").
    • Several of these flows are appropriate for building an OAuth 2.0 authentication provider (like Google, Facebook, X (Twitter), GitHub, etc):
      • implicit
      • clientCredentials
      • authorizationCode
    • But there is one specific "flow" that can be perfectly used for handling authentication in the same application directly:
      • password: algunos de los siguientes capítulos cubrirán ejemplos de esto.
  • openIdConnect: has a way to define how to discover OAuth2 authentication data automatically.
    • Este descubrimiento automático es lo que está definido en la especificación de OpenID Connect.

Consejo

Integrar otros proveedores de autenticación/autorización como Google, Facebook, X (Twitter), GitHub, etc. también es posible y relativamente fácil.

El problema más complejo es construir un proveedor de autenticación/autorización como esos, pero FastAPI te da las herramientas para hacerlo fácilmente, mientras hace el trabajo pesado por ti.

Utilidades de FastAPI

FastAPI proporciona varias herramientas para cada uno de estos esquemas de seguridad en el módulo fastapi.security que simplifican el uso de estos mecanismos de seguridad.

En los siguientes capítulos verás cómo agregar seguridad a tu API usando esas herramientas proporcionadas por FastAPI.

Y también verás cómo se integra automáticamente en el sistema de documentación interactiva.