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 برحسب ms نیست. |
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تفکیک شود. - ارجاعهای تفکیکناپذیر،
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]: ... میآیند.