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، بزرگتر از0و حداکثر برابر با بیشینهٔ مُهر زمانیDateدر JavaScript (8640000000000000) باشد.- اگر
expiresنامعتبر باشد (نوع نادرست،NaN،0، منفی، نامتناهی یا فراتر از آن بیشینه)، پروفایل باinvalid_expiresواجد شرایط نیست. - اگر زمان
expiresگذشته باشد، پروفایل باexpiredواجد شرایط نیست. tokenRefاعتبارسنجیexpiresرا دور نمیزند.
قواعد تفکیک
- معناشناسی تفکیککننده برای
expiresبا معناشناسی واجد شرایط بودن یکسان است. - برای پروفایلهای واجد شرایط، محتوای توکن میتواند از مقدار درونخطی یا
tokenRefتفکیک شود. - ارجاعهای غیرقابلتفکیک در خروجی
models status --probeمقدارunresolved_refرا ایجاد میکنند.
قابلیت انتقال رونوشت عامل
وراثت احراز هویت عامل بهصورت خواندن مستقیم است. وقتی یک عامل پروفایل محلی ندارد، در زمان اجرا پروفایلها را از مخزن عامل پیشفرض/اصلی تفکیک میکند، بدون آنکه محتوای محرمانه را در مخزن اعتبارنامهٔ خودش (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 خارجی مبتنی بر فایل استفاده میکنند و نتایج Keychain در macOS را نمیخوانند یا دوباره استفاده نمیکنند.
محافظ سیاست 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]: ... میآیند.