Gateway
Semantyka danych uwierzytelniających
Ta semantyka zapewnia spójność zachowania uwierzytelniania podczas wyboru i w czasie działania. Jest współdzielona przez:
resolveAuthProfileOrder(kolejność profili)resolveApiKeyForProfile(rozpoznawanie poświadczeń w czasie działania)openclaw models status --probe- kontrole uwierzytelniania
openclaw doctor(doctor-auth)
Stabilne kody przyczyn sondowania
Wyniki sondowania zawierają kategorię status (ok, auth, rate_limit, billing, timeout, format, unknown, no_model) oraz stabilny reasonCode, gdy sonda nigdy nie dotarła do wywołania modelu:
reasonCode |
Znaczenie |
|---|---|
excluded_by_auth_order |
Profil pominięto w jawnej kolejności uwierzytelniania jego dostawcy. |
missing_credential |
Nie skonfigurowano poświadczenia wbudowanego ani SecretRef. |
expired |
Wartość expires tokenu wskazuje czas w przeszłości. |
invalid_expires |
expires nie jest prawidłowym dodatnim znacznikiem czasu Unix w milisekundach. |
unresolved_ref |
Nie udało się rozpoznać skonfigurowanego SecretRef. |
ineligible_profile |
Profil jest niezgodny z konfiguracją dostawcy (w tym nieprawidłowo sformatowany klucz wejściowy). |
no_model |
Poświadczenia istnieją, ale nie rozpoznano żadnego modelu, który można sondować. |
Kontrole kwalifikowalności zgłaszają ok jako kod przyczyny dla użytecznych poświadczeń.
Poświadczenia tokenowe
Poświadczenia tokenowe (type: "token") obsługują wbudowany token i/lub tokenRef.
Reguły kwalifikowalności
- Profil tokenowy nie kwalifikuje się, gdy brakuje zarówno
token, jak itokenRef(missing_credential). expiresjest opcjonalne. Jeśli występuje, musi być skończoną liczbą milisekund od początku epoki Unix, większą niż0i nie większą niż maksymalny znacznik czasu JavaScriptDate(8640000000000000).- Jeśli
expiresjest nieprawidłowe (niewłaściwy typ,NaN,0, wartość ujemna, nieskończona lub przekraczająca to maksimum), profil nie kwalifikuje się z kodeminvalid_expires. - Jeśli
expireswskazuje czas w przeszłości, profil nie kwalifikuje się z kodemexpired. tokenRefnie omija walidacjiexpires.
Reguły rozpoznawania
- Semantyka mechanizmu rozpoznawania odpowiada semantyce kwalifikowalności dla
expires. - W przypadku kwalifikujących się profili materiał tokenu można rozpoznać z wartości wbudowanej lub
tokenRef. - Odwołania, których nie można rozpoznać, powodują wyświetlenie
unresolved_refw danych wyjściowychmodels status --probe.
Przenośność kopii agenta
Dziedziczenie uwierzytelniania agenta działa przez bezpośredni odczyt. Gdy agent nie ma profilu lokalnego, w czasie działania rozpoznaje profile z magazynu agenta domyślnego/głównego bez kopiowania materiału tajnego do własnego magazynu poświadczeń (agents/<agentId>/agent/openclaw-agent.sqlite).
Jawne przepływy kopiowania, takie jak openclaw agents add, korzystają z następujących zasad przenośności:
- Profile
api_keyitokensą przenośne, chyba że ustawionocopyToAgents: false. - Profile
oauthdomyślnie nie są przenośne, ponieważ tokeny odświeżania mogą być jednorazowe lub wrażliwe na rotację. - Przepływy OAuth należące do dostawcy mogą włączyć tę funkcję za pomocą
copyToAgents: truetylko wtedy, gdy wiadomo, że kopiowanie materiału odświeżania między agentami jest bezpieczne; włączenie ma zastosowanie tylko wtedy, gdy profil zawiera wbudowany materiał dostępu/odświeżania.
Profile nieprzenośne pozostają dostępne przez dziedziczenie z bezpośrednim odczytem, chyba że agent docelowy zaloguje się osobno i utworzy własny profil lokalny.
Ścieżki uwierzytelniania wyłącznie konfiguracyjnego
Wpisy auth.profiles z mode: "aws-sdk" są metadanymi routingu, a nie przechowywanymi poświadczeniami. Są prawidłowe, gdy dostawca docelowy używa models.providers.<id>.auth: "aws-sdk" — jest to ścieżka zapisywana przez konfigurację Amazon Bedrock należącą do Pluginu. Identyfikatory tych profili mogą występować w auth.order i nadpisaniach sesji, nawet jeśli w magazynie poświadczeń nie istnieje odpowiadający im wpis.
Nie zapisuj type: "aws-sdk" w magazynie poświadczeń; przechowywane poświadczenia mogą mieć wyłącznie typ api_key, token lub oauth. Jeśli starszy plik auth-profiles.json zawiera taki znacznik, polecenie openclaw doctor --fix przenosi go do auth.profiles i usuwa znacznik z magazynu.
Jawne filtrowanie kolejności uwierzytelniania
- Gdy dla dostawcy ustawiono
auth.order.<provider>lub nadpisanie kolejności w magazynie uwierzytelniania,models status --probesonduje wyłącznie identyfikatory profili, które pozostają w rozpoznanej kolejności uwierzytelniania tego dostawcy. Przechowywane nadpisanie ma pierwszeństwo przed konfiguracjąauth.order. - Przechowywany profil tego dostawcy, który pominięto w jawnej kolejności, nie jest później niejawnie wypróbowywany. Dane wyjściowe sondowania zgłaszają go z
reasonCode: excluded_by_auth_orderi szczegółemWykluczono przez auth.order dla tego dostawcy.
Rozpoznawanie celu sondowania
- Cele sondowania mogą pochodzić z profili uwierzytelniania, poświadczeń środowiskowych lub pliku
models.json(sourcewyniku:profile,env,models.json). - Jeśli dostawca ma poświadczenia, ale OpenClaw nie może rozpoznać dla niego modelu, który można sondować,
models status --probezgłaszastatus: no_modelzreasonCode: no_model.
Wykrywanie poświadczeń zewnętrznego CLI
- Poświadczenia używane wyłącznie w czasie działania i należące do zewnętrznych narzędzi CLI (Claude CLI dla
claude-cli, Codex CLI dlaopenai, MiniMax CLI dlaminimax-portal) są wykrywane tylko wtedy, gdy dostawca, środowisko uruchomieniowe lub profil uwierzytelniania mieści się w zakresie bieżącej operacji albo gdy istnieje już przechowywany profil lokalny tego zewnętrznego źródła. - Elementy wywołujące magazyn uwierzytelniania wybierają jawny tryb wykrywania zewnętrznego CLI:
nonetylko dla utrwalonego uwierzytelniania/uwierzytelniania Pluginu,existingdo odświeżania już przechowywanych profili zewnętrznego CLI alboscopeddla konkretnego zestawu dostawców/profili. - Ścieżki tylko do odczytu i ścieżki stanu przekazują
allowKeychainPrompt: false; używają wyłącznie poświadczeń zewnętrznego CLI przechowywanych w plikach i nie odczytują ani nie wykorzystują ponownie wyników pęku kluczy macOS.
Zabezpieczenie zasad SecretRef dla OAuth
Dane wejściowe SecretRef służą wyłącznie do poświadczeń statycznych. Poświadczenia OAuth są modyfikowalne w czasie działania (przepływy odświeżania utrwalają rotowane tokeny), dlatego materiał OAuth oparty na SecretRef rozdzielałby modyfikowalny stan między magazynami.
- Jeśli poświadczenie profilu ma
type: "oauth", obiekty SecretRef są odrzucane dla każdego pola materiału poświadczeń w tym profilu. - Jeśli
auth.profiles.<id>.modema wartość"oauth", dane wejściowekeyRef/tokenRefoparte na SecretRef dla tego profilu są odrzucane. - Naruszenia powodują bezwarunkowe błędy (zgłaszane wyjątki) w ścieżkach przygotowywania tajnych danych podczas uruchamiania/ponownego wczytywania oraz rozpoznawania profilu.
Komunikaty zgodne ze starszymi wersjami
Ze względu na zgodność ze skryptami pierwsza linia błędów sondowania pozostaje niezmieniona:
Auth profile credentials are missing or expired.
Przyjazne dla użytkownika szczegóły i stabilny kod przyczyny pojawiają się w kolejnych wierszach w formacie ↳ Przyczyna uwierzytelniania [code]: ....