Saltar al contenido

python

Cuál es la forma más sencilla y segura de generar un API KEY o secreto en Python

Descubre cuál es la forma más sencilla y segura de generar un API KEY, secreto o cadena en hexadecimal en Python para proteger tu API o microservicio.

Generar api key secreto en Python

Desde hace un año más o menos hasta hoy, noviembre de 2018, me he visto involucrado en el desarrollo de múltiples APIs y microservicios, todos ellos debidamente protegidos con un API KEY o un token. Pero tengo un pequeño problema: siempre que me pongo con uno nuevo nunca me acuerdo cuál es la forma más sencilla y segura de generar en Python un secreto, una cadena aleatoria en hexadecimal o un API KEY. Es por ello que he decidido crear este POST que, aunque sea corto, hará que tenga un sitio rápido al que volver la próxima vez que tenga una tarea similar. Espero que a ti también te sirva de ayuda.

La forma más sencilla de generar un API KEY en Python (< 3.6)

Antes de Python 3.6, para generar una cadena aleatoria en hexadecimal para utilizar como API KEY, nos podíamos ayudar de los módulos «os» y «binascii».
Por ejemplo, para generar una cadena de longitud 40, solo tenemos que ejecutar las siguientes líneas de código:

>>> import os, binascii
>>> binascii.b2a_hex(os.urandom(20))
b'b6026f861fd41a94c3389d54293de9d04bde6f7c'

Descubriendo el módulo secrets en Python (3.6+)

La llegada de Python 3.6 trajo consigo la aparición del módulo secrets. Según su propia documentación, se indica que:

«El módulo secrets se utiliza para generar números aleatorios criptográficamente fuertes, adecuados para administrar datos como contraseñas, autenticación de usuarios, tokens de seguridad y secretos relacionados»

«En particular, secrets debe ser usado preferentemente frente a la generación de números pseudoaleatorios empleando el módulo random, que está diseñado para el modelado y la simulación, no para la seguridad o la criptografía»

Para simular con el módulo secrets el ejemplo visto en el apartado anterior, basta ejecutar el siguiente código:

>>> import secrets
>>> secrets.token_hex(20)
'ccaf5c9a22e854856d0c5b1b96c81e851bafb288'

En ciertas ocasiones, puede que queramos que el secreto forma parte de una URL, por ejemplo, para resetear un password. En ese caso es más apropiado usar la función token_urlsafedel mismo modo. Esta nos garantiza que los caracteres generados son seguros de usar en una URL:

>>>secrets.token_urlsafe(20)
'dxM4-BL1CPeHYIMmXNQevdlsvhI'

Hay que tener en cuenta que el número que se pasa entre paréntesis no es la longitud del número de caractéres, si no de bytes. En el caso de la función token_hex, 1 byte se corresponden con 2 dígitos hexadecimales. En cuanto a la función token_urlsafe, la cadena devuelta está codificada en Base 64, lo que viene a ser 1,3 caractéres por cada byte (aunque no siempre es así).

Si no se indica el número de bytes a utilizar, el módulo secrets usará uno razonable por defecto (que puede cambiar en cualquier momento en futuras actualizaciones).

Newsletter EstrategIA

Programar con IA sin perder el control

Si te ha interesado este artículo, esto también te va a interesar. Cada dos martes te cuento qué funciona y qué no al construir software con agentes de IA, con ejemplos reales de mi software factory y los números de mis proyectos, sin maquillar.

9.277 desarrolladores y profesionales ya la leen martes quincenales

EstrategIA Próximo número · martes

Lo que recibes

  1. Qué funciona (y qué no) programando con agentes de IA
  2. Casos reales de MaIA y DGC: decisiones, errores y resultados
  3. Los números de mis proyectos, sin maquillar
  4. Una idea que puedes aplicar esa misma semana

Sin spam. Te das de baja con un clic.

j2logo

Sigue leyendo

Listar directorio en Python
python

Listar directorio en Python. Listar ficheros de un directorio

requests - Hacer peticiones http en Python
python

Python requests. La librería para hacer peticiones http en Python

Web scraping con Python. Guía de inicio a BeautifulSoup
python

Web scraping con Python. Extraer datos de una web. Guía de inicio de Beautiful Soup

Tutorial de SQLAlchemy
python

SQLAlchemy. Tutorial de Python SQLAlchemy. Guía de inicio