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일 때 이를 단순 문자열로 처리하지 않음 (도메인/경로/만료가 유지되어야 함)
아키텍처
- 사용자가 Chrome에서 Get cookies.txt LOCALLY를 사용하여 쿠키를 JSON 배열로 내보냄.
- CLI (
op item create|edit --template)가 하나의API_CREDENTIAL항목을 upsert함. 각 쿠키는 숨겨진 필드이며, 값은 전체 쿠키 객체 JSON임. - 무인 앱은
@1password/sdk와 서비스 계정 토큰을 사용하여 가져옴. - 브라우저 자동화가 원점별로 쿠키를 주입한 후, 선택적으로
localStorage/sessionStorage에 접근 토큰을 기록함.
대화형 op는 사람(및 로그인된 CLI가 있는 에이전트)을 위한 것입니다. 서비스 계정 SDK는 봇과 스크래퍼를 위한 것입니다.
새 프로젝트 체크리스트
코드를 작성하기 전에 이 목록을 복사하여 채우십시오:
- [ ] 볼트 이름
- [ ] 항목 제목 (Service Account Auth Token 항목이 아님)
- [ ] Get cookies.txt LOCALLY에서 내보낸 각 원점당 하나의 JSON 내보내기 경로 (gitignore 처리됨)
- [ ] JSON 파일당 섹션 ID + 레이블
- [ ] 원점 URL 매핑 (쿠키 도메인 접미사 → https://host/)
- [ ] 서비스 계정 토큰 환경 변수 이름 (기본값 OP_SERVICE_ACCOUNT_TOKEN)
- [ ] 거부할 보호된 항목 제목
그런 다음:
- Get cookies.txt LOCALLY를 사용하여 JSON으로 쿠키 내보내기. 해당 파일 이름을 gitignore 처리.
- scripts/sync-cookies.sh로 푸시 (프로젝트에 복사하거나 이 스킬 디렉토리에서 실행).
- scripts/fetch-session.js를 앱에 복사하고,
op item get --format json(id필드)에서OP_VAULT_ID/OP_ITEM_ID를 설정. 하드코딩보다 환경 변수를 선호. - references/REFERENCE.md의 매핑을 사용하여 주입 구현. URL / 제목 / "로그인 양식 있음"으로 로그인 성공을 증명 — 쿠키를 출력하지 않음.
쿠키 내보내기
Chrome 확장 프로그램 Get cookies.txt LOCALLY (소스)를 사용하십시오. 기기에서 쿠키를 읽으며 기기 밖으로 전송하지 않습니다.
- Chrome에서 사이트(및 세션이 두 원점에 걸쳐 있는 경우 SSO 호스트)에 로그인.
- 해당 탭에서 Get cookies.txt LOCALLY를 엽니다.
- Export Format을 JSON으로 설정 — Netscape (
.txt) 또는 Header String이 아님. - 현재 사이트에 대해 Export를 클릭합니다. Export All Cookies는 꼭 필요한 경우에만 사용하고, 그런 다음 파일을 원점별로 분할.
.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를 사용합니다:
createClient({ auth: process.env.OP_SERVICE_ACCOUNT_TOKEN, integrationName, integrationVersion })client.items.get(vaultId, itemId)sectionId별로 필드를 수집 (있는 경우 레거시cookies섹션 포함)JSON.parse(field.value)(쿠키 객체처럼 보이는 경우); 그렇지 않으면{ name: field.title, value: raw }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 처리된 상태로 유지하고, 동기화 후 볼트를 진실 공급원으로 취급하십시오.