Gateway
ความหมายของข้อมูลรับรองการยืนยันตัวตน
ความหมายเชิงพฤติกรรมเหล่านี้ทำให้ลักษณะการยืนยันตัวตนในช่วงเลือกและขณะรันทำงานสอดคล้องกัน โดยใช้ร่วมกันใน:
resolveAuthProfileOrder(การจัดลำดับโปรไฟล์)resolveApiKeyForProfile(การแก้ไขข้อมูลประจำตัวขณะรัน)openclaw models status --probe- การตรวจสอบการยืนยันตัวตนของ
openclaw doctor(doctor-auth)
รหัสเหตุผลการตรวจสอบที่คงที่
ผลการตรวจสอบประกอบด้วยกลุ่ม status (ok, auth, rate_limit, billing, timeout, format, unknown, no_model) พร้อม reasonCode ที่คงที่เมื่อการตรวจสอบยังไม่ถึงขั้นเรียกโมเดล:
reasonCode |
ความหมาย |
|---|---|
excluded_by_auth_order |
โปรไฟล์ถูกละเว้นจากลำดับการยืนยันตัวตนที่ระบุไว้อย่างชัดเจนสำหรับผู้ให้บริการนั้น |
missing_credential |
ไม่ได้กำหนดข้อมูลประจำตัวแบบอินไลน์หรือ SecretRef |
expired |
ค่า expires ของโทเค็นเป็นเวลาที่ผ่านไปแล้ว |
invalid_expires |
expires ไม่ใช่ค่าประทับเวลา Unix หน่วยมิลลิวินาทีแบบจำนวนบวกที่ถูกต้อง |
unresolved_ref |
ไม่สามารถแก้ไข SecretRef ที่กำหนดค่าไว้ได้ |
ineligible_profile |
โปรไฟล์เข้ากันไม่ได้กับการกำหนดค่าผู้ให้บริการ (รวมถึงข้อมูลคีย์ที่มีรูปแบบไม่ถูกต้อง) |
no_model |
มีข้อมูลประจำตัว แต่ไม่สามารถระบุโมเดลที่เป็นตัวเลือกสำหรับการตรวจสอบได้ |
การตรวจสอบคุณสมบัติจะรายงาน ok เป็นรหัสเหตุผลสำหรับข้อมูลประจำตัวที่ใช้งานได้
ข้อมูลประจำตัวแบบโทเค็น
ข้อมูลประจำตัวแบบโทเค็น (type: "token") รองรับ token และ/หรือ tokenRef แบบอินไลน์
กฎคุณสมบัติ
- โปรไฟล์โทเค็นไม่มีคุณสมบัติเมื่อไม่มีทั้ง
tokenและtokenRef(missing_credential) expiresเป็นตัวเลือก เมื่อระบุแล้ว ต้องเป็นจำนวนจำกัดของมิลลิวินาทีตั้งแต่ Unix epoch ที่มากกว่า0และไม่เกินค่าประทับเวลาสูงสุดของDateใน JavaScript (8640000000000000)- หาก
expiresไม่ถูกต้อง (ชนิดข้อมูลผิด,NaN,0, ค่าติดลบ, ค่าไม่จำกัด หรือเกินค่าสูงสุดดังกล่าว) โปรไฟล์จะไม่มีคุณสมบัติพร้อมรหัสinvalid_expires - หาก
expiresเป็นเวลาที่ผ่านไปแล้ว โปรไฟล์จะไม่มีคุณสมบัติพร้อมรหัสexpired tokenRefไม่ข้ามการตรวจสอบความถูกต้องของexpires
กฎการแก้ไขค่า
- ความหมายเชิงพฤติกรรมของตัวแก้ไขค่าตรงกับความหมายเชิงพฤติกรรมของการตรวจสอบคุณสมบัติสำหรับ
expires - สำหรับโปรไฟล์ที่มีคุณสมบัติ สามารถแก้ไขข้อมูลโทเค็นจากค่าอินไลน์หรือ
tokenRef - การอ้างอิงที่แก้ไขไม่ได้จะแสดง
unresolved_refในผลลัพธ์ของmodels status --probe
ความสามารถในการพกพาสำเนาของเอเจนต์
การสืบทอดการยืนยันตัวตนของเอเจนต์ใช้การอ่านผ่าน เมื่อเอเจนต์ไม่มีโปรไฟล์ภายใน จะใช้โปรไฟล์จากที่เก็บของเอเจนต์เริ่มต้น/หลักขณะรัน โดยไม่คัดลอกข้อมูลลับไปยังที่เก็บข้อมูลประจำตัวของตนเอง (agents/<agentId>/agent/openclaw-agent.sqlite)
กระบวนการคัดลอกโดยชัดแจ้ง เช่น openclaw agents add ใช้นโยบายความสามารถในการพกพานี้:
- โปรไฟล์
api_keyและtokenสามารถพกพาได้ เว้นแต่กำหนดcopyToAgents: false - โปรไฟล์
oauthไม่สามารถพกพาได้โดยค่าเริ่มต้น เนื่องจากรีเฟรชโทเค็นอาจใช้ได้เพียงครั้งเดียวหรือไวต่อการหมุนเวียน - กระบวนการ OAuth ที่ผู้ให้บริการเป็นเจ้าของสามารถเลือกเข้าร่วมด้วย
copyToAgents: trueได้เฉพาะเมื่อทราบว่าการคัดลอกข้อมูลรีเฟรชข้ามเอเจนต์มีความปลอดภัย โดยการเลือกเข้าร่วมจะมีผลเฉพาะเมื่อโปรไฟล์มีข้อมูลการเข้าถึง/รีเฟรชแบบอินไลน์
โปรไฟล์ที่ไม่สามารถพกพายังคงใช้งานผ่านการสืบทอดแบบอ่านผ่านได้ เว้นแต่เอเจนต์เป้าหมายจะลงชื่อเข้าใช้แยกต่างหากและสร้างโปรไฟล์ภายในของตนเอง
เส้นทางการยืนยันตัวตนที่ใช้เฉพาะการกำหนดค่า
รายการ auth.profiles ที่มี mode: "aws-sdk" เป็นเมทาดาทาการกำหนดเส้นทาง ไม่ใช่ข้อมูลประจำตัวที่จัดเก็บไว้ รายการเหล่านี้ใช้ได้เมื่อผู้ให้บริการเป้าหมายใช้ models.providers.<id>.auth: "aws-sdk" ซึ่งเป็นเส้นทางที่การตั้งค่า Amazon Bedrock ซึ่ง Plugin เป็นเจ้าของเขียนขึ้น รหัสโปรไฟล์เหล่านี้อาจปรากฏใน auth.order และการแทนค่าระดับเซสชัน แม้ไม่มีรายการที่ตรงกันในที่เก็บข้อมูลประจำตัว
อย่าเขียน type: "aws-sdk" ลงในที่เก็บข้อมูลประจำตัว ข้อมูลประจำตัวที่จัดเก็บมีได้เฉพาะ api_key, token หรือ oauth หาก auth-profiles.json แบบเก่ามีเครื่องหมายดังกล่าว openclaw doctor --fix จะย้ายไปยัง auth.profiles และนำเครื่องหมายออกจากที่เก็บ
การกรองตามลำดับการยืนยันตัวตนที่ระบุไว้อย่างชัดเจน
- เมื่อตั้งค่า
auth.order.<provider>หรือการแทนค่าลำดับของที่เก็บการยืนยันตัวตนสำหรับผู้ให้บริการmodels status --probeจะตรวจสอบเฉพาะรหัสโปรไฟล์ที่ยังอยู่ในลำดับการยืนยันตัวตนที่แก้ไขแล้วสำหรับผู้ให้บริการนั้น การแทนค่าที่จัดเก็บไว้มีลำดับความสำคัญเหนือการกำหนดค่าauth.order - โปรไฟล์ที่จัดเก็บไว้สำหรับผู้ให้บริการนั้นแต่ถูกละเว้นจากลำดับที่ระบุไว้อย่างชัดเจนจะไม่ถูกลองใช้อย่างเงียบ ๆ ในภายหลัง ผลการตรวจสอบจะรายงานโปรไฟล์นั้นด้วย
reasonCode: excluded_by_auth_orderและรายละเอียดExcluded by auth.order for this provider.
การระบุเป้าหมายการตรวจสอบ
- เป้าหมายการตรวจสอบอาจมาจากโปรไฟล์การยืนยันตัวตน ข้อมูลประจำตัวจากสภาพแวดล้อม หรือ
models.json(sourceของผลลัพธ์:profile,env,models.json) - หากผู้ให้บริการมีข้อมูลประจำตัว แต่ OpenClaw ไม่สามารถระบุโมเดลที่เป็นตัวเลือกสำหรับการตรวจสอบได้
models status --probeจะรายงานstatus: no_modelพร้อมreasonCode: no_model
การค้นหาข้อมูลประจำตัวจาก CLI ภายนอก
- ข้อมูลประจำตัวสำหรับขณะรันเท่านั้นที่ CLI ภายนอกเป็นเจ้าของ (Claude CLI สำหรับ
claude-cli, Codex CLI สำหรับopenai, MiniMax CLI สำหรับminimax-portal) จะถูกค้นหาเฉพาะเมื่อผู้ให้บริการ รันไทม์ หรือโปรไฟล์การยืนยันตัวตนอยู่ในขอบเขตของการดำเนินการปัจจุบัน หรือเมื่อมีโปรไฟล์ภายในที่จัดเก็บไว้สำหรับแหล่งภายนอกนั้นอยู่แล้ว - ผู้เรียกใช้ที่เก็บการยืนยันตัวตนจะเลือกโหมดการค้นหา CLI ภายนอกอย่างชัดเจน ได้แก่
noneสำหรับเฉพาะการยืนยันตัวตนที่คงอยู่/ของ Plugin,existingสำหรับรีเฟรชโปรไฟล์ CLI ภายนอกที่จัดเก็บไว้แล้ว หรือscopedสำหรับชุดผู้ให้บริการ/โปรไฟล์ที่เฉพาะเจาะจง - เส้นทางแบบอ่านอย่างเดียว/สถานะจะส่ง
allowKeychainPrompt: falseโดยใช้เฉพาะข้อมูลประจำตัวของ CLI ภายนอกที่เก็บในไฟล์ และไม่อ่านหรือนำผลลัพธ์จาก macOS Keychain กลับมาใช้
ตัวป้องกันนโยบาย SecretRef สำหรับ OAuth
ข้อมูลเข้า SecretRef ใช้สำหรับข้อมูลประจำตัวแบบคงที่เท่านั้น ข้อมูลประจำตัว OAuth สามารถเปลี่ยนแปลงได้ขณะรัน (กระบวนการรีเฟรชจะบันทึกโทเค็นที่หมุนเวียนแล้ว) ดังนั้นข้อมูล OAuth ที่อ้างอิงผ่าน SecretRef จะแยกสถานะที่เปลี่ยนแปลงได้ออกเป็นหลายที่เก็บ
- หากข้อมูลประจำตัวของโปรไฟล์เป็น
type: "oauth"ออบเจ็กต์ SecretRef จะถูกปฏิเสธสำหรับฟิลด์ข้อมูลประจำตัวทุกฟิลด์ในโปรไฟล์นั้น - หาก
auth.profiles.<id>.modeเป็น"oauth"ข้อมูลเข้าkeyRef/tokenRefที่อ้างอิงผ่าน SecretRef สำหรับโปรไฟล์นั้นจะถูกปฏิเสธ - การละเมิดเป็นความล้มเหลวขั้นร้ายแรง (เกิดข้อผิดพลาดแบบโยนทิ้ง) ในเส้นทางการเตรียมข้อมูลลับระหว่างเริ่มต้น/โหลดใหม่และเส้นทางการแก้ไขโปรไฟล์
ข้อความที่เข้ากันได้กับระบบเดิม
เพื่อความเข้ากันได้ของสคริปต์ ข้อผิดพลาดจากการตรวจสอบจะคงบรรทัดแรกนี้ไว้โดยไม่เปลี่ยนแปลง:
Auth profile credentials are missing or expired.
รายละเอียดที่เข้าใจง่ายและรหัสเหตุผลที่คงที่จะตามมาในบรรทัดถัดไปในรูปแบบ ↳ Auth reason [code]: ...