Cookies de sesión de 1Password
Guía para sesiones de navegador autenticadas cuyas cookies residen en 1Password, no en git. Léala antes de escribir código de sincronización, recuperación o inyección de cookies. Esquema de elementos, mapeo de Chrome y solución de problemas: references/REFERENCE.md.
Esta habilidad es un flujo de trabajo de cookie de sesión. No es el MCP de Entornos de 1Password (montajes .env).
No almacene JSON de cookies como variables de Entorno.
No está terminado hasta que
Subida (JSON → 1Password)
- Cookies exportadas con Get cookies.txt LOCALLY como JSON (no Netscape
.txt) - Los archivos JSON de cookies están en gitignore
-
opha iniciado sesión y la bóveda existe - Elemento creado o actualizado mediante
--template(nunca valores secretos en argv) - Resumen registrado (conteos, nombres de sección, token presente/ausente solamente)
Recuperación (app / entorno del agente)
-
OP_SERVICE_ACCOUNT_TOKENproviene del entorno, nunca codificado - Cada campo de cookie se analiza como JSON de objeto de cookie completo, con fallback de valor plano
- Los registros muestran conteos / nombre de host / token presente — nunca valores
Inyección (navegador)
- Cookies agrupadas por origen; la página navega a ese origen antes de
setCookie -
sameSite,domain/hostOnly,securemapeados (ver references/REFERENCE.md) - Cookies que Chrome rechaza se omiten; el inicio de sesión se demuestra sin volcar cookies
No hacer
- Confirmar JSON de cookie, ni pegar valores de cookie / token /
cookieHeaderen el chat - Poner secretos en argv de proceso (
op item edit … value=secret) - Modificar elementos cuyo título sea
Service Account Auth Token: … - Usar el MCP de Entornos de 1Password o montajes
.envpara sesiones de cookies - Registrar
Set-Cookie,Authorization,access_tokeno valores de campo - Tratar un campo de cookie como una cadena simple cuando es JSON (dominio/ruta/caducidad deben sobrevivir)
Arquitectura
- El humano exporta cookies desde Chrome con Get cookies.txt LOCALLY como un array JSON de objetos de cookie.
- CLI (
op item create|edit --template) inserta un elementoAPI_CREDENTIAL. Cada cookie es un campo oculto cuyo valor es el JSON completo del objeto de cookie. - Las aplicaciones no supervisadas recuperan con
@1password/sdky un token de cuenta de servicio. - La automatización del navegador inyecta cookies por origen, luego opcionalmente escribe un token de acceso en
localStorage/sessionStorage.
op interactivo es para humanos (y agentes con CLI que ha iniciado sesión). El SDK de cuenta de servicio es para bots y scrapers.
Lista de verificación para nuevo proyecto
Copie esta lista y complétela antes de escribir código:
- [ ] Nombre de la bóveda
- [ ] Título del elemento (no un elemento de Service Account Auth Token)
- [ ] Una ruta de exportación JSON por origen desde Get cookies.txt LOCALLY (gitignorado)
- [ ] id de sección + etiqueta por archivo JSON
- [ ] Mapa de URL de origen (sufijo de dominio de cookie → https://host/)
- [ ] Nombre de entorno del token de cuenta de servicio (por defecto OP_SERVICE_ACCOUNT_TOKEN)
- [ ] Títulos de elementos protegidos a rechazar
Luego:
- Exporte cookies con Get cookies.txt LOCALLY como JSON. Gitignore esos nombres de archivo.
- Suba con scripts/sync-cookies.sh (cópielo en el proyecto o ejecútelo desde este directorio de habilidad).
- Copie scripts/fetch-session.js en la aplicación; establezca
OP_VAULT_ID/OP_ITEM_IDdesdeop item get --format json(camposid). Prefiera entorno sobre codificación. - Implemente la inyección usando el mapeo en references/REFERENCE.md. Demuestre inicio de sesión con URL / título / “tiene formulario de inicio de sesión” — no imprimiendo cookies.
Exportar cookies
Use la extensión de Chrome Get cookies.txt LOCALLY (fuente). Lee cookies en el dispositivo y no las envía fuera de la máquina.
- Inicie sesión en el sitio en Chrome (y el host de SSO, si la sesión abarca dos orígenes).
- Abra Get cookies.txt LOCALLY en esa pestaña.
- Establezca Formato de exportación en JSON — no Netscape (
.txt) ni Cadena de encabezado. - Haga clic en Exportar para el sitio actual. Use Exportar todas las cookies solo cuando sea necesario, luego divida el archivo por origen.
- Guarde el
.jsonjunto al conjunto de herramientas (gitignorado). Ese archivo es la entrada parascripts/sync-cookies.sh --json.
Repita en cada origen para el que necesite una sección de 1Password. Netscape cookies.txt no es una entrada --json válida.
Subir
Requiere op y python3. Los valores pasan por una plantilla temporal en modo -0600, luego la plantilla se elimina.
bash scripts/sync-cookies.sh \
--vault TuBoveda \
--title "cookies de ejemplo.com" \
--hostname "ejemplo.com, sso.ejemplo.com" \
--url https://ejemplo.com \
--json ./ejemplo.com.json --section app:ejemplo.com \
--json ./sso.ejemplo.com.json --section sso:sso.ejemplo.com
--section ID:ETIQUETA se aplica al anterior --json. Si se omite, el id de sección es un slug del nombre base del archivo y la etiqueta es el nombre del archivo.
--dry-run previsualiza. --include-empty almacena valores en blanco. --keep-missing deja campos de cookie que desaparecieron del JSON.
Si el título ya existe, actualice ese elemento. No cree un segundo elemento con el mismo título.
Recuperar
Las aplicaciones en tiempo de ejecución usan @1password/sdk, no op:
createClient({ auth: process.env.OP_SERVICE_ACCOUNT_TOKEN, integrationName, integrationVersion })client.items.get(vaultId, itemId)- Recolecte campos por
sectionId(incluya una seccióncookiesheredada si está presente) JSON.parse(field.value)cuando parezca un objeto de cookie; de lo contrario{ name: field.title, value: raw }- Construya
cookieHeadersolo en memoria. Devuelva conteos en registros.
Campos integrados a leer cuando estén presentes: hostname, credential (token de acceso), username.
Inyectar
Para cada grupo de origen: goto(origen) → setCookie(...). Si el lote falla, establezca cookies una por una y omita las fallidas.
Cookies de SSO primero cuando el sitio redirige a través de SSO, luego el origen de la aplicación, luego cualquier origen restante. Después de que las cookies aterricen, goto al origen de la aplicación e inyecte credential en localStorage / sessionStorage como access_token cuando la aplicación lo espere.
Seguridad
- Chat y registros: nombres, conteos, nombre de host, booleanos. Nunca valores.
- Redacte claves que coincidan con
cookie|access_token|authorization|password|credential|secret|set-cookie|cookieheader|bearer. - Los elementos de cuenta de servicio están protegidos contra escritura. Los scripts de sincronización de cookies y subida de secretos deben rechazar esos títulos.
- El JSON de cookies en disco es una sesión activa. Manténgalo gitignorado; trate la bóveda como fuente de verdad después de la sincronización.