Fundamentals
OAuth
OpenClaw รองรับ "การยืนยันตัวตนผ่านการสมัครสมาชิก" ผ่าน OAuth สำหรับผู้ให้บริการที่มีบริการนี้ (โดยเฉพาะ OpenAI Codex (ChatGPT OAuth)) สำหรับ Anthropic การแบ่งใช้งานจริง ในตอนนี้คือ:
- คีย์ API ของ Anthropic: การคิดค่าบริการ API ของ Anthropic ตามปกติ
- Anthropic Claude CLI / การยืนยันตัวตนผ่านการสมัครสมาชิกภายใน OpenClaw: เจ้าหน้าที่ Anthropic แจ้งเราว่าการใช้งานนี้ได้รับอนุญาตอีกครั้ง
OpenAI Codex OAuth รองรับอย่างชัดเจนสำหรับการใช้งานในเครื่องมือภายนอก เช่น OpenClaw หน้านี้อธิบาย:
สำหรับ Anthropic ในการใช้งานจริง การยืนยันตัวตนด้วยคีย์ API เป็นแนวทางที่ปลอดภัยกว่าและแนะนำให้ใช้
- วิธีการทำงานของ การแลกเปลี่ยนโทเค็น OAuth (PKCE)
- ที่ที่ จัดเก็บ โทเค็น (และเหตุผล)
- วิธีจัดการ หลายบัญชี (โปรไฟล์ + การแทนที่รายเซสชัน)
OpenClaw ยังรองรับ Plugin ของผู้ให้บริการ ที่มาพร้อมโฟลว์ OAuth หรือคีย์ API ของตัวเอง เรียกใช้ผ่าน:
openclaw models auth login --provider <id>
แหล่งรับโทเค็น (เหตุผลที่มีอยู่)
ผู้ให้บริการ OAuth มักออก refresh token ใหม่ ระหว่างโฟลว์ล็อกอิน/รีเฟรช ผู้ให้บริการบางราย (หรือไคลเอนต์ OAuth บางตัว) อาจทำให้ refresh token เก่าใช้ไม่ได้เมื่อมีการออกโทเค็นใหม่สำหรับผู้ใช้/แอปเดียวกัน
อาการที่พบได้จริง:
- คุณล็อกอินผ่าน OpenClaw และ ผ่าน Claude Code / Codex CLI → หนึ่งในนั้นสุ่มถูก "ล็อกเอาต์" ในภายหลัง
เพื่อลดปัญหานี้ OpenClaw จึงปฏิบัติต่อ auth-profiles.json เป็น แหล่งรับโทเค็น:
- runtime อ่านข้อมูลยืนยันตัวตนจาก ที่เดียว
- เราสามารถเก็บหลายโปรไฟล์และกำหนดเส้นทางได้อย่างแน่นอน
- การใช้ CLI ภายนอกซ้ำเป็นเรื่องเฉพาะผู้ให้บริการ: Codex CLI สามารถเริ่มต้นโปรไฟล์
openai-codex:defaultที่ว่างได้ แต่เมื่อ OpenClaw มีโปรไฟล์ OAuth ภายในเครื่องแล้ว refresh token ภายในเครื่องจะเป็นแหล่งอ้างอิงหลัก ส่วนการผสานรวมอื่นยังคง ให้ภายนอกจัดการและอ่านที่เก็บการยืนยันตัวตนของ CLI ซ้ำได้ - พาธสถานะและเริ่มต้นที่รู้อยู่แล้วว่าชุดผู้ให้บริการที่กำหนดค่าไว้มีขอบเขตใด จะจำกัดการค้นพบ CLI ภายนอกไว้ที่ชุดนั้น ดังนั้นที่เก็บล็อกอินของ CLI ที่ไม่เกี่ยวข้อง จะไม่ถูกตรวจสอบสำหรับการตั้งค่าที่มีผู้ให้บริการเดียว
การจัดเก็บ (โทเค็นอยู่ที่ไหน)
ความลับถูกจัดเก็บในที่เก็บการยืนยันตัวตนของเอเจนต์:
- โปรไฟล์การยืนยันตัวตน (OAuth + คีย์ API + การอ้างอิงระดับค่าที่ไม่บังคับ):
~/.openclaw/agents/<agentId>/agent/auth-profiles.json - ไฟล์ความเข้ากันได้ย้อนหลัง:
~/.openclaw/agents/<agentId>/agent/auth.json(รายการapi_keyแบบคงที่จะถูกล้างเมื่อค้นพบ)
ไฟล์นำเข้าอย่างเดียวแบบเดิม (ยังรองรับอยู่ แต่ไม่ใช่ที่เก็บหลัก):
~/.openclaw/credentials/oauth.json(นำเข้าไปยังauth-profiles.jsonเมื่อใช้งานครั้งแรก)
ทั้งหมดข้างต้นยังเคารพ $OPENCLAW_STATE_DIR ด้วย (การแทนที่ไดเรกทอรีสถานะ) อ้างอิงฉบับเต็ม: /gateway/configuration
สำหรับการอ้างอิงความลับแบบคงที่และพฤติกรรมการเปิดใช้ snapshot ตอน runtime โปรดดู การจัดการความลับ
เมื่อเอเจนต์รองไม่มีโปรไฟล์การยืนยันตัวตนภายในเครื่อง OpenClaw จะใช้การสืบทอดแบบอ่านทะลุ
จากที่เก็บของเอเจนต์หลัก/ค่าเริ่มต้น โดยจะไม่โคลน auth-profiles.json ของเอเจนต์หลัก
เมื่ออ่าน OAuth refresh token มีความอ่อนไหวเป็นพิเศษ: โฟลว์การคัดลอกปกติจะข้ามโทเค็นเหล่านี้
ตามค่าเริ่มต้น เพราะผู้ให้บริการบางรายหมุนเวียนหรือทำให้ refresh token ใช้ไม่ได้หลังใช้งาน
ให้กำหนดค่าล็อกอิน OAuth แยกต่างหากสำหรับเอเจนต์เมื่อเอเจนต์นั้นต้องใช้บัญชีอิสระ
ความเข้ากันได้กับโทเค็นเดิมของ Anthropic
OpenClaw ยังเปิดเผย setup-token ของ Anthropic เป็นพาธการยืนยันตัวตนด้วยโทเค็นที่รองรับ แต่ตอนนี้จะเลือกใช้ Claude CLI ซ้ำและ claude -p ก่อนเมื่อมีให้ใช้
การย้ายข้อมูล Anthropic Claude CLI
OpenClaw รองรับการใช้ Anthropic Claude CLI ซ้ำอีกครั้ง หากคุณมีล็อกอิน Claude ภายในเครื่อง บนโฮสต์อยู่แล้ว การเริ่มใช้งาน/กำหนดค่าสามารถใช้ซ้ำได้โดยตรง
การแลกเปลี่ยน OAuth (การล็อกอินทำงานอย่างไร)
โฟลว์ล็อกอินแบบโต้ตอบของ OpenClaw ถูกนำไปใช้ใน @mariozechner/pi-ai และเชื่อมเข้ากับวิซาร์ด/คำสั่ง
setup-token ของ Anthropic
รูปแบบโฟลว์:
- เริ่ม setup-token ของ Anthropic หรือวางโทเค็นจาก OpenClaw
- OpenClaw จัดเก็บข้อมูลยืนยันตัวตน Anthropic ที่ได้ในโปรไฟล์การยืนยันตัวตน
- การเลือกโมเดลยังคงอยู่ที่
anthropic/... - โปรไฟล์การยืนยันตัวตน Anthropic ที่มีอยู่ยังคงพร้อมใช้สำหรับการย้อนกลับ/ควบคุมลำดับ
OpenAI Codex (ChatGPT OAuth)
OpenAI Codex OAuth รองรับอย่างชัดเจนสำหรับการใช้งานนอก Codex CLI รวมถึงเวิร์กโฟลว์ OpenClaw
รูปแบบโฟลว์ (PKCE):
- สร้าง PKCE verifier/challenge +
stateแบบสุ่ม - เปิด
https://auth.openai.com/oauth/authorize?... - พยายามรับ callback ที่
http://127.0.0.1:1455/auth/callback - หาก callback bind ไม่ได้ (หรือคุณใช้งานระยะไกล/ไม่มีหน้าจอ) ให้วาง URL/โค้ด redirect
- แลกเปลี่ยนที่
https://auth.openai.com/oauth/token - แยก
accountIdจาก access token และจัดเก็บ{ access, refresh, expires, accountId }
พาธวิซาร์ดคือ openclaw onboard → ตัวเลือกการยืนยันตัวตน openai-codex
การรีเฟรช + การหมดอายุ
โปรไฟล์จัดเก็บ timestamp expires
ตอน runtime:
- หาก
expiresอยู่ในอนาคต → ใช้ access token ที่จัดเก็บไว้ - หากหมดอายุ → รีเฟรช (ภายใต้ file lock) และเขียนทับข้อมูลยืนยันตัวตนที่จัดเก็บไว้
- หากเอเจนต์รองอ่านโปรไฟล์ OAuth ของเอเจนต์หลักที่สืบทอดมา การรีเฟรช จะเขียนกลับไปยังที่เก็บของเอเจนต์หลักแทนการคัดลอก refresh token เข้าไปใน ที่เก็บของเอเจนต์รอง
- ข้อยกเว้น: ข้อมูลยืนยันตัวตนของ CLI ภายนอกบางรายการยังคงให้ภายนอกจัดการ OpenClaw
จะอ่านที่เก็บการยืนยันตัวตนของ CLI เหล่านั้นซ้ำแทนการใช้ refresh token ที่คัดลอกมา
การเริ่มต้นด้วย Codex CLI ตั้งใจให้แคบกว่า: โดยจะสร้างโปรไฟล์
openai-codex:defaultที่ว่าง จากนั้นการรีเฟรชที่ OpenClaw เป็นเจ้าของจะทำให้โปรไฟล์ ภายในเครื่องเป็นแหล่งอ้างอิงหลักต่อไป
โฟลว์รีเฟรชเป็นแบบอัตโนมัติ โดยทั่วไปคุณไม่จำเป็นต้องจัดการโทเค็นด้วยตนเอง
หลายบัญชี (โปรไฟล์) + การกำหนดเส้นทาง
มีสองรูปแบบ:
1) แนะนำ: แยกเอเจนต์
หากคุณต้องการให้ "ส่วนตัว" และ "งาน" ไม่โต้ตอบกันเลย ให้ใช้เอเจนต์ที่แยกกัน (เซสชัน + ข้อมูลยืนยันตัวตน + เวิร์กสเปซแยกกัน):
openclaw agents add work
openclaw agents add personal
จากนั้นกำหนดค่าการยืนยันตัวตนต่อเอเจนต์ (วิซาร์ด) และกำหนดเส้นทางแชตไปยังเอเจนต์ที่ถูกต้อง
2) ขั้นสูง: หลายโปรไฟล์ในเอเจนต์เดียว
auth-profiles.json รองรับ ID โปรไฟล์หลายรายการสำหรับผู้ให้บริการเดียวกัน
เลือกโปรไฟล์ที่จะใช้:
- แบบโกลบอลผ่านลำดับการกำหนดค่า (
auth.order) - รายเซสชันผ่าน
/model ...@<profileId>
ตัวอย่าง (การแทนที่รายเซสชัน):
/model Opus@anthropic:work
วิธีดูว่า ID โปรไฟล์ใดมีอยู่:
openclaw channels list --json(แสดงauth[])
เอกสารที่เกี่ยวข้อง:
- การสลับสำรองโมเดล (กฎการหมุนเวียน + cooldown)
- คำสั่ง slash (พื้นผิวคำสั่ง)
ที่เกี่ยวข้อง
- การยืนยันตัวตน - ภาพรวมการยืนยันตัวตนของผู้ให้บริการโมเดล
- ความลับ - การจัดเก็บข้อมูลยืนยันตัวตนและ SecretRef
- ข้อมูลอ้างอิงการกำหนดค่า - คีย์ config การยืนยันตัวตน