Cookies de sessão 1Password
Playbook para sessões autenticadas de navegador cujos cookies residem no 1Password, não no git. Leia isto antes de escrever código de sincronização, busca ou injeção de cookies. Esquema do item, mapeamento do Chrome e solução de problemas: references/REFERENCE.md.
Esta habilidade é um fluxo de trabalho de cookie de sessão. Não é o MCP de Ambientes 1Password (montagens .env).
Não armazene JSON de cookies como variáveis de Ambiente.
Não concluído até
Push (JSON → 1Password)
- Cookies exportados com Get cookies.txt LOCALLY como JSON (não Netscape
.txt) - Arquivos JSON de cookies estão no .gitignore
-
opestá autenticado e o cofre existe - Item criado ou atualizado via
--template(nunca valores secretos em argv) - Resumo registrado (contagens, nomes de seção, token presente/ausente apenas)
Busca (aplicação / runtime do agente)
-
OP_SERVICE_ACCOUNT_TOKENvem do ambiente, nunca hardcoded - Cada campo de cookie analisado como JSON completo de objeto de cookie, com fallback para valor simples
- Logs mostram contagens / hostname / token-presente — nunca valores
Injeção (navegador)
- Cookies agrupados por origem; a página navega para essa origem antes de
setCookie -
sameSite,domain/hostOnly,securemapeados (consulte references/REFERENCE.md) - Cookies que o Chrome rejeita são ignorados; o login é comprovado sem despejar cookies
Não faça
- Comprometer JSON de cookies, ou colar valores de cookie / token /
cookieHeaderno chat - Colocar segredos no argv do processo (
op item edit … value=secret) - Modificar itens cujo título é
Service Account Auth Token: … - Usar o MCP de Ambientes 1Password ou montagens
.envpara sessões de cookie - Registrar
Set-Cookie,Authorization,access_tokenou valores de campo - Tratar um campo de cookie como string simples quando ele é JSON (domínio/caminho/expiração devem ser preservados)
Arquitetura
- Humano exporta cookies do Chrome com Get cookies.txt LOCALLY como um array JSON de objetos de cookie.
- CLI (
op item create|edit --template) faz upsert de um itemAPI_CREDENTIAL. Cada cookie é um campo oculto cujo valor é o JSON completo do objeto de cookie. - Aplicações não monitoradas buscam com
@1password/sdke um token de conta de serviço. - Automação do navegador injeta cookies por origem, e opcionalmente escreve um token de acesso em
localStorage/sessionStorage.
op interativo é para humanos (e agentes com CLI autenticada). SDK de conta de serviço é para bots e scrapers.
Checklist de novo projeto
Copie esta lista e preencha antes de escrever código:
- [ ] Nome do cofre
- [ ] Título do item (não um item Service Account Auth Token)
- [ ] Um caminho de exportação JSON por origem do Get cookies.txt LOCALLY (no .gitignore)
- [ ] Id da seção + rótulo por arquivo JSON
- [ ] Mapa de URL de origem (sufixo de domínio do cookie → https://host/)
- [ ] Nome do ambiente do token de conta de serviço (padrão OP_SERVICE_ACCOUNT_TOKEN)
- [ ] Títulos de itens protegidos a recusar
Então:
- Exporte cookies com Get cookies.txt LOCALLY como JSON. Coloque esses nomes de arquivo no .gitignore.
- Faça push com scripts/sync-cookies.sh (copie para o projeto ou execute a partir deste diretório de habilidade).
- Copie scripts/fetch-session.js para a aplicação; defina
OP_VAULT_ID/OP_ITEM_IDa partir deop item get --format json(camposid). Prefira ambiente a hardcoding. - Implemente a injeção usando o mapeamento em references/REFERENCE.md. Prove login com URL / título / “tem formulário de login” — não imprimindo cookies.
Exportar cookies
Use a extensão do Chrome Get cookies.txt LOCALLY (fonte). Ela lê cookies no dispositivo e não os envia para fora da máquina.
- Faça login no site no Chrome (e no host SSO, se a sessão abranger duas origens).
- Abra Get cookies.txt LOCALLY naquela aba.
- Defina Export Format como JSON — não Netscape (
.txt) e nem Header String. - Clique em Export para o site atual. Use Export All Cookies apenas quando necessário, depois divida o arquivo por origem.
- Salve o
.jsonao lado do kit de ferramentas (no .gitignore). Esse arquivo é a entrada parascripts/sync-cookies.sh --json.
Repita em cada origem para a qual você precisa de uma seção do 1Password. Netscape cookies.txt não é uma entrada --json válida.
Push
Requer op e python3. Os valores passam por um template temporário com modo 0600, e então o template é excluído.
bash scripts/sync-cookies.sh \
--vault YourVault \
--title "example.com cookies" \
--hostname "example.com, sso.example.com" \
--url https://example.com \
--json ./example.com.json --section app:example.com \
--json ./sso.example.com.json --section sso:sso.example.com
--section ID:LABEL aplica-se ao anterior --json. Se omitido, o id da seção é um slug do nome do arquivo e o rótulo é o nome do arquivo.
--dry-run pré-visualiza. --include-empty armazena valores em branco. --keep-missing mantém campos de cookie que desapareceram do JSON.
Se o título já existir, atualize esse item. Não crie um segundo item com o mesmo título.
Busca
Aplicações em runtime usam @1password/sdk, não op:
createClient({ auth: process.env.OP_SERVICE_ACCOUNT_TOKEN, integrationName, integrationVersion })client.items.get(vaultId, itemId)- Colete campos por
sectionId(inclua uma seçãocookieslegada se presente) JSON.parse(field.value)quando parecer um objeto de cookie; senão{ name: field.title, value: raw }- Construa
cookieHeaderapenas em memória. Retorne contagens nos logs.
Campos internos a ler quando presentes: hostname, credential (token de acesso), username.
Injeção
Para cada grupo de origem: goto(origin) → setCookie(...). Se o lote falhar, defina os cookies um por um e pule falhas.
Cookies SSO primeiro quando o site redireciona através de SSO, depois a origem da aplicação, depois quaisquer origens restantes. Após os cookies serem aplicados, goto a origem da aplicação e injete credential em localStorage / sessionStorage como access_token quando a aplicação esperar.
Segurança
- Chat e logs: nomes, contagens, hostname, booleanos. Nunca valores.
- Remova chaves que correspondam a
cookie|access_token|authorization|password|credential|secret|set-cookie|cookieheader|bearer. - Itens de conta de serviço são protegidos contra escrita. Scripts de sincronização de cookies e push de segredos devem recusar esses títulos.
- JSON de cookies em disco é uma sessão ativa. Mantenha no .gitignore; trate o cofre como fonte da verdade após a sincronização.