Gateway
معناشناسی اعتبارنامههای احراز هویت
این سند معناشناسی معیار صلاحیت و حل اعتبارنامه را که در موارد زیر استفاده میشود تعریف میکند:
resolveAuthProfileOrderresolveApiKeyForProfilemodels status --probedoctor-auth
هدف این است که رفتار زمان انتخاب و زمان اجرا همراستا بماند.
کدهای پایدار دلیل کاوش
okexcluded_by_auth_ordermissing_credentialinvalid_expiresexpiredunresolved_refno_model
اعتبارنامههای توکن
اعتبارنامههای توکن (type: "token") از token درونخطی و/یا tokenRef پشتیبانی میکنند.
قواعد صلاحیت
- وقتی هر دو
tokenوtokenRefغایب باشند، یک پروفایل توکن فاقد صلاحیت است. expiresاختیاری است.- اگر
expiresوجود داشته باشد، باید عددی متناهی و بزرگتر از0باشد. - اگر
expiresنامعتبر باشد (NaN،0، منفی، نامتناهی، یا از نوع نادرست)، پروفایل باinvalid_expiresفاقد صلاحیت است. - اگر
expiresدر گذشته باشد، پروفایل باexpiredفاقد صلاحیت است. tokenRefاعتبارسنجیexpiresرا دور نمیزند.
قواعد حل
- معناشناسی resolver با معناشناسی صلاحیت برای
expiresمطابقت دارد. - برای پروفایلهای واجد صلاحیت، ماده توکن ممکن است از مقدار درونخطی یا
tokenRefحل شود. - ارجاعهای حلنشدنی در خروجی
models status --probeمقدارunresolved_refتولید میکنند.
قابلیت حمل کپی agent
وراثت احراز هویت agent بهصورت read-through است. وقتی یک agent پروفایل محلی ندارد، میتواند در زمان اجرا پروفایلها را از store پیشفرض/اصلی agent بدون کپی کردن ماده محرمانه در auth-profiles.json خودش حل کند.
جریانهای کپی صریح، مانند openclaw agents add، از این سیاست قابلیت حمل استفاده میکنند:
- پروفایلهای
api_keyقابل حمل هستند مگر اینکهcopyToAgents: falseباشد. - پروفایلهای
tokenقابل حمل هستند مگر اینکهcopyToAgents: falseباشد. - پروفایلهای
oauthبهصورت پیشفرض قابل حمل نیستند، زیرا refresh tokenها میتوانند یکبارمصرف یا حساس به چرخش باشند. - جریانهای OAuth متعلق به provider فقط زمانی میتوانند با
copyToAgents: trueفعال شوند که امن بودن کپی ماده refresh بین agentها معلوم باشد.
پروفایلهای غیرقابل حمل از طریق وراثت read-through همچنان در دسترس میمانند، مگر اینکه agent هدف جداگانه وارد سیستم شود و پروفایل محلی خودش را بسازد.
مسیرهای احراز هویت فقط پیکربندی
ورودیهای auth.profiles با mode: "aws-sdk" فراداده مسیریابی هستند، نه اعتبارنامههای ذخیرهشده. آنها زمانی معتبرند که provider هدف از models.providers.<id>.auth: "aws-sdk" یا مسیر پیشفرض داخلی AWS SDK برای Amazon Bedrock استفاده کند. این شناسههای پروفایل حتی وقتی ورودی متناظری در auth-profiles.json وجود ندارد، ممکن است در auth.order و overrideهای نشست ظاهر شوند.
type: "aws-sdk" را در auth-profiles.json ننویسید. اگر یک نصب legacy چنین نشانهای داشته باشد، openclaw doctor --fix آن را به auth.profiles منتقل میکند و نشانه را از store اعتبارنامه حذف میکند.
فیلتر کردن صریح ترتیب احراز هویت
- وقتی
auth.order.<provider>یا override ترتیب auth-store برای یک provider تنظیم شده باشد،models status --probeفقط شناسههای پروفایلی را کاوش میکند که در ترتیب احراز هویت حلشده برای آن provider باقی ماندهاند. - پروفایل ذخیرهشده برای آن provider که از ترتیب صریح حذف شده باشد، بعدا بهصورت پنهانی امتحان نمیشود. خروجی کاوش آن را با
reasonCode: excluded_by_auth_orderو جزئیاتExcluded by auth.order for this provider.گزارش میکند.
حل هدف کاوش
- هدفهای کاوش میتوانند از پروفایلهای احراز هویت، اعتبارنامههای محیطی، یا
models.jsonبیایند. - اگر یک provider اعتبارنامه داشته باشد اما OpenClaw نتواند گزینه مدل قابل کاوشی برای آن حل کند،
models status --probeمقدارstatus: no_modelرا باreasonCode: no_modelگزارش میکند.
کشف اعتبارنامه CLI خارجی
- اعتبارنامههای فقط زمان اجرا که متعلق به CLIهای خارجی هستند، فقط زمانی کشف میشوند که provider، زمان اجرا، یا پروفایل احراز هویت در دامنه عملیات فعلی باشد، یا زمانی که یک پروفایل محلی ذخیرهشده برای آن منبع خارجی از قبل وجود داشته باشد.
- فراخوانهای auth-store باید یک حالت کشف external-CLI صریح انتخاب کنند:
noneبرای احراز هویت ماندگار/Plugin فقط،existingبرای نوسازی پروفایلهای CLI خارجی که از قبل ذخیره شدهاند، یاscopedبرای مجموعه مشخصی از provider/profile. - مسیرهای فقطخواندنی/وضعیت مقدار
allowKeychainPrompt: falseرا ارسال میکنند؛ آنها فقط از اعتبارنامههای CLI خارجی مبتنی بر فایل استفاده میکنند و نتایج macOS Keychain را نمیخوانند یا دوباره استفاده نمیکنند.
محافظ سیاست OAuth SecretRef
- ورودی SecretRef فقط برای اعتبارنامههای ایستا است.
- اگر اعتبارنامه پروفایل
type: "oauth"باشد، اشیای SecretRef برای ماده اعتبارنامه آن پروفایل پشتیبانی نمیشوند. - اگر
auth.profiles.<id>.modeبرابر"oauth"باشد، ورودیkeyRef/tokenRefمبتنی بر SecretRef برای آن پروفایل رد میشود. - نقضها در مسیرهای حل احراز هویت startup/reload خطاهای قطعی هستند.
پیامرسانی سازگار با Legacy
برای سازگاری اسکریپت، خط نخست خطاهای کاوش بدون تغییر میماند:
Auth profile credentials are missing or expired.
جزئیات مناسب برای انسان و کدهای دلیل پایدار ممکن است در خطهای بعدی اضافه شوند.