Cuando programamos una aplicación, es bastante tentador escribir directamente las claves o contraseñas en el código fuente. Al fin y al cabo, funciona y es rápido. Sin embargo, esto es una mala práctica: si compartimos el código en GitHub, si alguien más lo revisa, o incluso si olvidamos dónde lo hemos puesto, esa información sensible queda expuesta.
La forma más recomendada y fácil de manejar credenciales, tokens o claves API es usar variables de entorno. Estas variables viven en el sistema operativo y pueden ser leídas por nuestro programa sin necesidad de “hardcodearlas” en el código. Así, aunque subamos el proyecto a un repositorio público, los secretos permanecen seguros.
Esta solución evita utilizar herramientas más complejas como Azure Key Vault o similares.
Tabla de contenidos
Ejemplo práctico con una API Key de ESIOS
Imagina que trabajas con la API de ESIOS (la plataforma que proporciona datos energéticos en España). En lugar de escribir en tu código algo como:
API_KEY = "mi-api-key-super-secreta"
lo correcto sería definir la variable en tu sistema operativo.
En Linux o macOS, puedes añadirla temporalmente así en la terminal:
export ESIOS_API_KEY="mi-api-key-super-secreta"
En Windows (PowerShell):
setx ESIOS_API_KEY "mi-api-key-super-secreta"
En Windows también puedes dar de alta tu variable como variable de entorno System desde la interface gráfica, para que esté disponible para todos los usuarios:
1.Abrir la configuración del sistema
- Haz clic derecho en el botón de Inicio y selecciona Sistema.
- En la ventana que aparece, busca y pulsa en Configuración avanzada del sistema (en el panel derecho o inferior).
2.Acceder a las variables de entorno
- En la pestaña Opciones avanzadas, pulsa el botón Variables de entorno….
3.Crear una nueva variable
- En el apartado Variables del sistema, pulsa Nueva….
- En Nombre de la variable escribe:
ESIOS_API_KEY. - En Valor de la variable, pega tu clave de API.
- Acepta los cambios.
4.Aplicar y cerrar
Cómo leer la variable en Python
Una vez definida, tu código en Python puede acceder a esa clave usando el módulo estándar os:
import os
api_key = os.getenv("ESIOS_API_KEY")
if api_key:
print("Clave cargada correctamente")
else:
print("No se encontró la clave")
Incluso puedes usarla directamente para autenticar una petición HTTP, por ejemplo con requests:
import os
import requests
api_key = os.getenv("ESIOS_API_KEY")
headers = {"Authorization": f"Token {api_key}"}
response = requests.get("https://api.esios.ree.es/indicators", headers=headers)
print(response.status_code, response.json())
Resumiendo
Guardar secretos en variables de entorno te protege de fugas accidentales, facilita la colaboración en equipo y te permite tener configuraciones distintas para desarrollo, pruebas y producción sin modificar el código fuente.
En conclusión: nunca hardcodees tus secretos. Usa variables de entorno y duerme más tranquilo.