OAuth
OpenClaw 는 이를 제공하는 프로바이더에 대해 OAuth 를 통한 ‘구독 인증(subscription auth)‘을 지원합니다(특히 OpenAI Codex (ChatGPT OAuth)). Anthropic 구독의 경우 setup-token 플로우를 사용하십시오. 이 페이지에서는 다음을 설명합니다.- OAuth 토큰 교환이 작동하는 방식(PKCE)
- 토큰이 저장되는 위치(및 그 이유)
- 다중 계정을 처리하는 방법(프로필 + 세션별 오버라이드)
토큰 싱크(token sink)(존재 이유)
OAuth 프로바이더는 로그인/리프레시 플로우 중에 새 리프레시 토큰을 발급하는 경우가 일반적입니다. 일부 프로바이더(또는 OAuth 클라이언트)는 동일한 사용자/앱에 대해 새 토큰이 발급되면 이전 리프레시 토큰을 무효화할 수 있습니다. 실제 증상:- OpenClaw 그리고 Claude Code / Codex CLI 를 통해 로그인 → 이후 무작위로 한쪽이 ‘로그아웃’됨
auth-profiles.json 를 토큰 싱크로 취급합니다.
- 런타임은 하나의 위치에서 자격 증명을 읽습니다.
- 여러 프로필을 유지하고 이를 결정적으로 라우팅할 수 있습니다.
저장소(토큰이 위치하는 곳)
시크릿은 에이전트별로 저장됩니다.- 인증 프로필(OAuth + API 키):
~/.openclaw/agents/<agentId>/agent/auth-profiles.json - 런타임 캐시(자동 관리; 편집하지 마십시오):
~/.openclaw/agents/<agentId>/agent/auth.json
~/.openclaw/credentials/oauth.json(첫 사용 시auth-profiles.json로 가져옴)
$OPENCLAW_STATE_DIR(상태 디렉토리 오버라이드)도 존중합니다. 전체 참조: /gateway/configuration
Anthropic setup-token(구독 인증)
어느 머신에서든claude setup-token 를 실행한 다음, OpenClaw 에 붙여넣으십시오.
OAuth 교환(로그인이 작동하는 방식)
OpenClaw 의 대화형 로그인 플로우는@mariozechner/pi-ai 에 구현되어 있으며, 마법사/명령에 연결되어 있습니다.
Anthropic(Claude Pro/Max) setup-token
플로우 형태:claude setup-token실행- 토큰을 OpenClaw 에 붙여넣기
- 토큰 인증 프로필로 저장(리프레시 없음)
openclaw onboard → 인증 선택 setup-token(Anthropic)입니다.
OpenAI Codex(ChatGPT OAuth)
플로우 형태(PKCE):- PKCE verifier/challenge + 랜덤
state생성 https://auth.openai.com/oauth/authorize?...열기http://127.0.0.1:1455/auth/callback에서 콜백 캡처 시도- 콜백을 바인딩할 수 없거나 원격/헤드리스 환경인 경우, 리디렉트 URL/코드를 붙여넣기
https://auth.openai.com/oauth/token에서 교환- 액세스 토큰에서
accountId추출 후{ access, refresh, expires, accountId }저장
openclaw onboard → 인증 선택 openai-codex 입니다.
리프레시 + 만료
프로필에는expires 타임스탬프가 저장됩니다.
런타임에서:
expires가 미래라면 → 저장된 액세스 토큰 사용- 만료된 경우 → (파일 락 하에) 리프레시하고 저장된 자격 증명을 덮어씀
다중 계정(프로필) + 라우팅
두 가지 패턴이 있습니다.1. 권장: 분리된 에이전트
‘개인’과 ‘업무’가 절대 상호작용하지 않게 하려면, 격리된 에이전트(분리된 세션 + 자격 증명 + 워크스페이스)를 사용하십시오.2. 고급: 하나의 에이전트에 여러 프로필
auth-profiles.json 는 동일한 프로바이더에 대해 여러 프로필 ID 를 지원합니다.
사용할 프로필을 선택하는 방법:
- 설정 순서를 통한 전역 선택(
auth.order) - 세션별로
/model ...@<profileId>를 통한 선택
/model Opus@anthropic:work
openclaw channels list --json(auth[]표시)
- /concepts/model-failover(로테이션 + 쿨다운 규칙)
- /tools/slash-commands(명령 표면)