Community라이팅 & 에디팅github.com

1Password 세션 쿠키

브라우저 세션 쿠키를 1Password에 저장하고, 서비스 계정으로 가져와 Chrome 또는 Playwright에 주입하는 에이전트 스킬입니다.

1Password 세션 쿠키란 무엇인가요?

이 스킬은 인증된 브라우저 세션의 쿠키를 1Password에 안전하게 저장하고, 이를 에이전트(예: Claude Code)나 스크립트가 가져와서 Chrome 또는 Playwright 자동화에서 재사용할 수 있도록 지원합니다. 쿠키 JSON을 Git에 커밋하거나, 환경 변수로 노출하지 않고 1Password 볼트 내에서 관리함으로써 보안을 강화합니다. 주요 사용 흐름은 (1) Chrome 확장 프로그램 'Get cookies.txt LOCALLY'로 쿠키를 JSON 내보내기, (2) 1Password CLI로 API_CREDENTIAL 항목에 upsert, (3) @1password/sdk로 서비스 계정 토큰을 통해 가져오기, (4) Playwright 등에서 원점별로 쿠키 주입 및 접근 토큰 설정입니다. Netscape 형식의 cookies.txt가 아닌 반드시 JSON 형식의 쿠키 객체 배열을 사용해야 하며, 쿠키 값을 절대 로그나 채팅에 노출하지 않습니다. 참조 문서는 references/REFERENCE.md에 있습니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add alreshi/1password-cookies

Installed? Explore more 라이팅 & 에디팅 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

1Password 세션 쿠키은(는) 무엇을 하나요?

쿠키가 Git이 아닌 1Password에 저장되는 인증된 브라우저 세션을 위한 플레이북입니다. 쿠키 동기화, 가져오기 또는 주입 코드를 작성하기 전에 이 문서를 먼저 읽으십시오. 항목 스키마, Chrome 매핑 및 문제 해결은 references/REFERENCE.md를 참조하십시오.

이 스킬은 세션-쿠키 워크플로입니다. 1Password Environments MCP(.env 마운트)가 아닙니다. 쿠키 JSON을 환경 변수로 저장하지 마십시오.

완료 조건

푸시 (JSON → 1Password)

  • Get cookies.txt LOCALLY로 JSON 형식으로 내보낸 쿠키 (Netscape .txt 아님)
  • 쿠키 JSON 파일이 gitignore 처리됨
  • op가 로그인되어 있고 볼트가 존재함
  • --template을 통해 항목이 생성 또는 업데이트됨 (인수 값에 비밀 정보를 넣지 않음)
  • 요약이 로깅됨 (개수, 섹션 이름, 토큰 존재 여부만)

가져오기 (앱 / 에이전트 런타임)

  • OP_SERVICE_ACCOUNT_TOKEN은 환경 변수에서 가져오며, 하드코딩되지 않음
  • 각 쿠키 필드는 전체 쿠키-객체 JSON으로 파싱되며, 일반 값 폴백 처리됨
  • 로그에 개수 / 호스트명 / 토큰-존재 여부만 표시됨 — 값은 절대 표시되지 않음

주입 (브라우저)

  • 쿠키가 원점별로 그룹화되고, 페이지가 setCookie 전에 해당 원점으로 이동함
  • sameSite, domain / hostOnly, secure가 매핑됨 (references/REFERENCE.md 참조)
  • Chrome이 거부하는 쿠키는 건너뛰고, 쿠키를 덤프하지 않고 로그인 성공을 증명함

하지 말아야 할 것

  • 쿠키 JSON을 커밋하거나, 쿠키 / 토큰 / cookieHeader 값을 채팅에 붙여넣기
  • 프로세스 argv에 비밀 정보를 넣지 않음 (op item edit … value=secret)
  • 제목이 Service Account Auth Token: …인 항목을 수정하지 않음
  • 쿠키 세션에 1Password Environments MCP 또는 .env 마운트를 사용하지 않음
  • Set-Cookie, Authorization, access_token 또는 필드 값을 로깅하지 않음
  • 쿠키 필드가 JSON일 때 이를 단순 문자열로 처리하지 않음 (도메인/경로/만료가 유지되어야 함)

아키텍처

  1. 사용자가 Chrome에서 Get cookies.txt LOCALLY를 사용하여 쿠키를 JSON 배열로 내보냄.
  2. CLI (op item create|edit --template)가 하나의 API_CREDENTIAL 항목을 upsert함. 각 쿠키는 숨겨진 필드이며, 값은 전체 쿠키 객체 JSON임.
  3. 무인 앱은 @1password/sdk와 서비스 계정 토큰을 사용하여 가져옴.
  4. 브라우저 자동화가 원점별로 쿠키를 주입한 후, 선택적으로 localStorage / sessionStorage에 접근 토큰을 기록함.

대화형 op는 사람(및 로그인된 CLI가 있는 에이전트)을 위한 것입니다. 서비스 계정 SDK는 봇과 스크래퍼를 위한 것입니다.

새 프로젝트 체크리스트

코드를 작성하기 전에 이 목록을 복사하여 채우십시오:

- [ ] 볼트 이름
- [ ] 항목 제목 (Service Account Auth Token 항목이 아님)
- [ ] Get cookies.txt LOCALLY에서 내보낸 각 원점당 하나의 JSON 내보내기 경로 (gitignore 처리됨)
- [ ] JSON 파일당 섹션 ID + 레이블
- [ ] 원점 URL 매핑 (쿠키 도메인 접미사 → https://host/)
- [ ] 서비스 계정 토큰 환경 변수 이름 (기본값 OP_SERVICE_ACCOUNT_TOKEN)
- [ ] 거부할 보호된 항목 제목

그런 다음:

  1. Get cookies.txt LOCALLY를 사용하여 JSON으로 쿠키 내보내기. 해당 파일 이름을 gitignore 처리.
  2. scripts/sync-cookies.sh로 푸시 (프로젝트에 복사하거나 이 스킬 디렉토리에서 실행).
  3. scripts/fetch-session.js를 앱에 복사하고, op item get --format json (id 필드)에서 OP_VAULT_ID / OP_ITEM_ID를 설정. 하드코딩보다 환경 변수를 선호.
  4. references/REFERENCE.md의 매핑을 사용하여 주입 구현. URL / 제목 / "로그인 양식 있음"으로 로그인 성공을 증명 — 쿠키를 출력하지 않음.

쿠키 내보내기

Chrome 확장 프로그램 Get cookies.txt LOCALLY (소스)를 사용하십시오. 기기에서 쿠키를 읽으며 기기 밖으로 전송하지 않습니다.

  1. Chrome에서 사이트(및 세션이 두 원점에 걸쳐 있는 경우 SSO 호스트)에 로그인.
  2. 해당 탭에서 Get cookies.txt LOCALLY를 엽니다.
  3. Export Format을 JSON으로 설정 — Netscape (.txt) 또는 Header String이 아님.
  4. 현재 사이트에 대해 Export를 클릭합니다. Export All Cookies는 꼭 필요한 경우에만 사용하고, 그런 다음 파일을 원점별로 분할.
  5. .json을 툴킷 옆에 저장 (gitignore 처리됨). 이 파일이 scripts/sync-cookies.sh --json의 입력입니다.

1Password 섹션이 필요한 각 원점에 대해 반복하십시오. Netscape cookies.txt는 유효한 --json 입력이 아닙니다.

푸시

op와 python3가 필요합니다. 값은 모드가 0600인 임시 템플릿을 통해 전달된 후 템플릿이 삭제됩니다.

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은 이전 --json에 적용됩니다. 생략하면 섹션 ID는 파일 이름 줄기의 슬러그이고 레이블은 파일 이름입니다.

--dry-run은 미리보기입니다. --include-empty는 빈 값을 저장합니다. --keep-missing는 JSON에서 사라진 쿠키 필드를 유지합니다.

제목이 이미 존재하면 해당 항목을 업데이트합니다. 동일한 제목으로 두 번째 항목을 생성하지 마십시오.

가져오기

런타임 앱은 op 대신 @1password/sdk를 사용합니다:

  1. createClient({ auth: process.env.OP_SERVICE_ACCOUNT_TOKEN, integrationName, integrationVersion })
  2. client.items.get(vaultId, itemId)
  3. sectionId별로 필드를 수집 (있는 경우 레거시 cookies 섹션 포함)
  4. JSON.parse(field.value) (쿠키 객체처럼 보이는 경우); 그렇지 않으면 { name: field.title, value: raw }
  5. cookieHeader는 메모리에서만 구성합니다. 로그에는 개수를 반환합니다.

존재할 때 읽을 기본 제공 필드: hostname, credential (접근 토큰), username.

주입

각 원점 그룹에 대해: goto(origin) → setCookie(...). 배치가 실패하면 쿠키를 하나씩 설정하고 실패한 것은 건너뜁니다.

사이트가 SSO를 통해 리디렉션할 때 SSO 쿠키를 먼저, 그 다음 앱 원점, 그 다음 나머지 원점 순서로 합니다. 쿠키가 적용된 후 앱 원점으로 goto하고, 앱이 필요로 할 때 credential을 localStorage / sessionStorage에 access_token으로 주입합니다.

안전

  • 채팅 및 로그: 이름, 개수, 호스트명, 불리언 값. 절대 값 자체는 표시하지 않음.
  • cookie|access_token|authorization|password|credential|secret|set-cookie|cookieheader|bearer와 일치하는 키를 수정 처리.
  • 서비스 계정 항목은 쓰기 보호됩니다. 쿠키 동기화 및 비밀 푸시 스크립트는 이러한 제목을 거부해야 합니다.
  • 디스크의 쿠키 JSON은 활성 세션입니다. gitignore 처리된 상태로 유지하고, 동기화 후 볼트를 진실 공급원으로 취급하십시오.

관련 스킬