AACWorkflow Docs

인증과 토큰

AACWorkflow에는 세 종류의 토큰이 있습니다 — 브라우저, CLI, 데몬에 각각 하나씩. 어떤 상황에 무엇을 쓰는지 설명합니다.

AACWorkflow에는 세 종류의 토큰이 있으며, 각각 하나의 컨텍스트에 대응합니다: 브라우저 Web UI, 명령줄과 스크립트, 그리고 데몬입니다. 세 가지 모두 동일한 당신을 나타내지만, 범위와 수명이 다릅니다.

세 가지 토큰

토큰형식사용되는 곳수명
JWT 쿠키aacworkflow_auth 쿠키 (HttpOnly)웹 브라우저30일
개인 액세스 토큰 (PAT)mul_ 접두사CLI, 스크립트, 직접 API 호출기본적으로 만료 없음. API로 생성할 때 expires_in_days를 전달할 수 있습니다
데몬 토큰mdt_ 접두사데몬-서버 통신데몬 자체가 관리

일상적인 사용에서는 앞의 두 가지만 직접 다루게 됩니다. 데몬 토큰aacworkflow daemon login이 자동으로 생성하고 갱신하므로, 신경 쓸 필요가 없습니다.

각 토큰이 접근할 수 있는 것

API 라우트JWT 쿠키PAT데몬 토큰
/api/user/* (사용자 수준 작업)
/api/workspaces/:id/* (워크스페이스 수준)
/api/daemon/* (데몬 전용)
WebSocket /ws (실시간 푸시)✓ (쿠키)✓ (첫 메시지로 인증)

PAT는 거의 모든 것에 접근할 수 있습니다 — 이는 "완전한 당신"을 나타냅니다. 데몬 토큰은 데몬에 필요한 일, 즉 작업을 가져오고 결과를 보고하는 것만 할 수 있습니다.

둘 다 /api/daemon/*에 접근할 수 있지만, 범위가 다릅니다. PAT는 사용자 전체를 나타내며 — 일단 인증되면 당신이 속한 모든 워크스페이스를 볼 수 있습니다. 데몬 토큰은 생성 시점에 단일 워크스페이스에 고정되며 해당 워크스페이스의 리소스에만 접근할 수 있습니다. 프로덕션에서는 데몬을 데몬 토큰으로 실행하세요. 편의를 위해 PAT를 사용하는 지름길을 택하지 마세요. 그렇지 않으면 데몬에 필요한 것보다 훨씬 많은 권한을 부여하게 됩니다.

로그인

Email + 인증 코드

  1. 이메일을 입력하면 서버가 6자리 코드를 보냅니다.
  2. 코드를 입력하면 서버가 JWT 쿠키를 발급(브라우저)하거나 PAT로 교환(CLI)합니다.

Google OAuth

활성화된 경우, Sign in with Google을 클릭하고 표준 OAuth 콜백을 거치세요. AACWorkflow Cloud에서 로그인이 작동하는 방식은 로그인 및 회원가입을 참고하세요.

PAT 생성, 조회, 취소

PAT 생성은 두 가지 방법으로 할 수 있습니다:

  • Web UI: 설정 → API 토큰 → 새 토큰
  • CLI: aacworkflow login은 아직 로컬 PAT가 없으면 자동으로 하나를 생성합니다

전체 PAT는 생성될 때 정확히 한 번만 표시됩니다. 새로 고침하거나 대화상자를 닫은 후에는 다시 볼 수 없습니다.

AACWorkflow는 데이터베이스에 PAT의 해시만 저장합니다 — 서버조차 원본을 가져올 수 없습니다. 즉시 복사하여 저장하세요. 분실하면 유일한 방법은 취소하고 새로 생성하는 것입니다.

기존 PAT 조회(이름, 생성 시각, 마지막 사용 시각 — 전체 토큰은 포함하지 않음)는 설정 → API 토큰에 있습니다.

PAT 취소: 목록에서 Revoke를 클릭하세요. 취소는 즉시 적용됩니다 — 그 PAT로 보낸 다음 요청은 401로 거부됩니다.

로그아웃은 로컬 토큰만 삭제합니다

aacworkflow auth logout을 실행하거나 Web UI에서 로그아웃을 클릭하면:

  • 로컬 토큰이 지워집니다 — CLI는 ~/.aacworkflow/config.json에서 PAT를 제거하고, 브라우저는 쿠키를 삭제합니다.
  • PAT는 서버에서 여전히 유효합니다 — 로그아웃하기 전에 누군가 당신의 PAT를 입수했다면(예를 들어 다른 기기에 복사했다면), 그들은 여전히 그것을 사용할 수 있습니다.

PAT가 유출되었다고 의심되면, 단순히 로그아웃하지 마세요. 설정 → API 토큰로 가서 그 토큰을 취소하세요. 취소만이 유출된 토큰을 즉시 무효화합니다.

다음 단계