Una clave de API filtrada cuesta dinero
Una clave de API es una cadena secreta que prueba que una petición viene de ti. Un proveedor de modelos suele cobrar a tu cuenta cada llamada que la lleva.
Hay desarrolladores que filtran claves al escribirlas en el código y subirlo a Git. Hay programas automáticos que buscan justo eso: una clave filtrada es una factura y un riesgo.
Al final de esta lección
Nota
Puedo mantener una clave fuera de mi código y de mi historial de Git.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Clave de API | una cadena secreta que prueba que una petición es tuya | |
| Variable de entorno | un valor con nombre que recibe un programa desde fuera de su código | MY_API_KEY |
| El archivo .env | un archivo de texto con líneas NOMBRE=valor para tu equipo | |
| El archivo .gitignore | una lista de archivos que Git nunca debe seguir | |
| Rotar | crear una clave nueva y cancelar la antigua |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
En este laboratorio tu código no lleva clave
Tu script envía la cabecera authorization: Bearer lab. La palabra lab es un marcador, no una clave. Al salir, la plataforma lo cambia por tu token real y elige el modelo.
Así que la clave nunca está en tu código y nunca la ves. En un proyecto real, la clave la guardas tú.
Llama a un modelo sin clave
docker exec -w /home/node/project agent node -e "const u=(process.env.AI_URL||'http://ai:4000')+'/v1/chat/completions';(async()=>{const headers={'content-type':'application/json',authorization:'Bearer lab'};console.log('Cabecera de autorización en mi código: '+headers.authorization);try{const r=await fetch(u,{method:'POST',headers,body:JSON.stringify({model:'lab',messages:[{role:'user',content:'En una frase, ¿por qué una clave de API debe quedar fuera del código?'}],max_tokens:60})});const j=await r.json();if(r.ok===false)throw new Error(r.status+' '+j.error.message);console.log('Modelo: '+j.choices[0].message.content)}catch(e){console.log('Sin respuesta ('+e.message+'). Muestra grabada:');console.log('Modelo: Quien lea el código puede usar la clave y gastar tu dinero.')}})()"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Una clave real vive en el entorno
Un proveedor real te da una clave larga. No la escribas nunca en un archivo que Git sigue. Ponla en una variable de entorno y léela en el código con process.env.MY_API_KEY.
En tu equipo, guarda las variables en un archivo .env y anota ese archivo en .gitignore, para que Git no lo vea nunca.
Escribe un .env y un .gitignore de prueba
docker exec -w /home/node/project agent sh -c "mkdir -p demo-claves && printf 'EXAMPLE_API_KEY=no-es-una-clave-real-123\n' > demo-claves/.env && printf '.env\n' > demo-claves/.gitignore"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Lee el .env y oculta el valor
docker exec -w /home/node/project agent node -e "const fs=require('fs');const nl=String.fromCharCode(10);for(const line of fs.readFileSync('demo-claves/.env','utf8').trim().split(nl)){const i=line.indexOf('=');const v=line.slice(i+1);console.log(line.slice(0,i)+' está definida, '+v.length+' caracteres, valor oculto')}console.log('.env está en .gitignore: '+(fs.readFileSync('demo-claves/.gitignore','utf8').split(nl).includes('.env')?'sí':'no'))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
La misma idea en un despliegue real
Tu servicio de alojamiento tiene un lugar para los secretos y los entrega a tu programa como variables de entorno. El código es el mismo en tu portátil y en el servidor.
Sube un archivo .env.example con los nombres y valores falsos. Le dice a una compañera nueva qué debe configurar.
Ejemplo resuelto: qué hacer tras una fuga
| Qué pasó | Qué hacer |
|---|---|
| La clave está en el código, sin commit | Pasarla a una variable de entorno |
| Está en un commit, sin subir | Rotar la clave y reescribir el commit |
| Está subida a un repositorio público | Rotar la clave ya y limpiar el historial |
| Se pegó en un chat o en un prompt | Rotar la clave |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un error frecuente
Advertencia
Mucha gente cree que borrar la clave en un commit nuevo la elimina. Git conserva todos los commits antiguos, así que la clave sigue en el historial para quien la copió. Rota la clave, porque solo una clave nueva deja inútil la antigua.