Gateway
Interfejs API wywoływania narzędzi
Gateway OpenClaw udostępnia prosty punkt końcowy HTTP do bezpośredniego wywoływania pojedynczego narzędzia. Jest zawsze włączony i używa uwierzytelniania Gateway oraz zasad narzędzi. Podobnie jak powierzchnia zgodna z OpenAI /v1/*, uwierzytelnianie bearer współdzielonym sekretem jest traktowane jako zaufany dostęp operatora do całego Gateway.
POST /tools/invoke- Ten sam port co Gateway (multipleksowanie WS + HTTP):
http://<gateway-host>:<port>/tools/invoke
Domyślny maksymalny rozmiar ładunku to 2 MB.
Uwierzytelnianie
Używa konfiguracji uwierzytelniania Gateway.
Typowe ścieżki uwierzytelniania HTTP:
- uwierzytelnianie współdzielonym sekretem (
gateway.auth.mode="token"lub"password"):Authorization: Bearer <token-or-password> - zaufane uwierzytelnianie HTTP przenoszące tożsamość (
gateway.auth.mode="trusted-proxy"): kieruj ruch przez skonfigurowane proxy świadome tożsamości i pozwól mu wstrzyknąć wymagane nagłówki tożsamości - otwarte uwierzytelnianie dla prywatnego wejścia (
gateway.auth.mode="none"): nagłówek uwierzytelniania nie jest wymagany
Uwagi:
- Gdy
gateway.auth.mode="token", użyjgateway.auth.token(lubOPENCLAW_GATEWAY_TOKEN). - Gdy
gateway.auth.mode="password", użyjgateway.auth.password(lubOPENCLAW_GATEWAY_PASSWORD). - Gdy
gateway.auth.mode="trusted-proxy", żądanie HTTP musi pochodzić ze skonfigurowanego zaufanego źródła proxy; proxy local loopback na tym samym hoście wymagają jawnegogateway.auth.trustedProxy.allowLoopback = true. - Wewnętrzni wywołujący z tego samego hosta, którzy omijają proxy, mogą używać
gateway.auth.password/OPENCLAW_GATEWAY_PASSWORDjako lokalnej bezpośredniej ścieżki awaryjnej. Jakikolwiek dowód w nagłówkachForwarded,X-Forwarded-*lubX-Real-IPutrzymuje żądanie na ścieżce trusted-proxy. - Jeśli
gateway.auth.rateLimitjest skonfigurowane i wystąpi zbyt wiele nieudanych prób uwierzytelnienia, punkt końcowy zwraca429zRetry-After.
Granica bezpieczeństwa (ważne)
Traktuj ten punkt końcowy jako powierzchnię pełnego dostępu operatora dla instancji Gateway.
- Uwierzytelnianie HTTP bearer tutaj nie jest wąskim modelem zakresów przypisanych do użytkownika.
- Prawidłowy token/hasło Gateway dla tego punktu końcowego należy traktować jak poświadczenie właściciela/operatora.
- Dla trybów uwierzytelniania współdzielonym sekretem (
tokenipassword) punkt końcowy przywraca normalne pełne domyślne uprawnienia operatora, nawet jeśli wywołujący wysyła węższy nagłówekx-openclaw-scopes. - Uwierzytelnianie współdzielonym sekretem traktuje też bezpośrednie wywołania narzędzi w tym punkcie końcowym jako tury nadawcy-właściciela.
- Zaufane tryby HTTP przenoszące tożsamość (na przykład uwierzytelnianie przez zaufane proxy albo
gateway.auth.mode="none"na prywatnym wejściu) honorująx-openclaw-scopes, gdy jest obecny, a w przeciwnym razie wracają do normalnego domyślnego zestawu zakresów operatora. - Utrzymuj ten punkt końcowy wyłącznie na loopback/tailnet/prywatnym wejściu; nie wystawiaj go bezpośrednio do publicznego internetu.
Macierz uwierzytelniania:
gateway.auth.mode="token"lub"password"+Authorization: Bearer ...- dowodzi posiadania współdzielonego sekretu operatora Gateway
- ignoruje węższe
x-openclaw-scopes - przywraca pełny domyślny zestaw zakresów operatora:
operator.admin,operator.approvals,operator.pairing,operator.read,operator.talk.secrets,operator.write - traktuje bezpośrednie wywołania narzędzi w tym punkcie końcowym jako tury nadawcy-właściciela
- zaufane tryby HTTP przenoszące tożsamość (na przykład uwierzytelnianie przez zaufane proxy albo
gateway.auth.mode="none"na prywatnym wejściu)- uwierzytelniają jakąś zewnętrzną zaufaną tożsamość lub granicę wdrożenia
- honorują
x-openclaw-scopes, gdy nagłówek jest obecny - wracają do normalnego domyślnego zestawu zakresów operatora, gdy nagłówek jest nieobecny
- tracą semantykę właściciela tylko wtedy, gdy wywołujący jawnie zawęża zakresy i pomija
operator.admin
Treść żądania
{ "tool": "sessions_list", "action": "json", "args": {}, "sessionKey": "main", "dryRun": false}Pola:
tool(ciąg znaków, wymagane): nazwa narzędzia do wywołania.action(ciąg znaków, opcjonalne): mapowane do argumentów, jeśli schemat narzędzia obsługujeaction, a ładunek argumentów go pominął.args(obiekt, opcjonalne): argumenty specyficzne dla narzędzia.sessionKey(ciąg znaków, opcjonalne): docelowy klucz sesji. Jeśli pominięty lub"main", Gateway używa skonfigurowanego głównego klucza sesji (honorujesession.mainKeyi domyślnego agenta alboglobalw zakresie globalnym).dryRun(wartość logiczna, opcjonalne): zarezerwowane do przyszłego użycia; obecnie ignorowane.
Zasady i zachowanie routingu
Dostępność narzędzi jest filtrowana przez ten sam łańcuch zasad, którego używają agenci Gateway:
tools.profile/tools.byProvider.profiletools.allow/tools.byProvider.allowagents.<id>.tools.allow/agents.<id>.tools.byProvider.allow- zasady grup (jeśli klucz sesji mapuje się na grupę lub kanał)
- zasady subagenta (podczas wywoływania z kluczem sesji subagenta)
Jeśli narzędzie nie jest dozwolone przez zasady, punkt końcowy zwraca 404.
Ważne uwagi dotyczące granic:
- Zatwierdzenia exec są zabezpieczeniami operatora, a nie osobną granicą autoryzacji dla tego punktu końcowego HTTP. Jeśli narzędzie jest tutaj osiągalne przez uwierzytelnianie Gateway + zasady narzędzi,
/tools/invokenie dodaje dodatkowego monitu o zatwierdzenie dla każdego wywołania. - Jeśli
execjest tutaj osiągalne, traktuj je jako mutującą powierzchnię powłoki. Odmowawrite,edit,apply_patchlub narzędzi HTTP zapisujących do systemu plików nie czyni wykonywania poleceń powłoki tylko do odczytu. - Nie udostępniaj poświadczeń bearer Gateway niezaufanym wywołującym. Jeśli potrzebujesz separacji między granicami zaufania, uruchamiaj osobne Gateway (najlepiej także jako osobnych użytkowników/na osobnych hostach systemu operacyjnego).
Gateway HTTP domyślnie stosuje też twardą listę odmów (nawet jeśli zasady sesji zezwalają na narzędzie):
exec- bezpośrednie wykonywanie poleceń (powierzchnia RCE)spawn- dowolne tworzenie procesów potomnych (powierzchnia RCE)shell- wykonywanie poleceń powłoki (powierzchnia RCE)fs_write- dowolna modyfikacja plików na hościefs_delete- dowolne usuwanie plików na hościefs_move- dowolne przenoszenie/zmiana nazwy plików na hościeapply_patch- zastosowanie poprawki może przepisać dowolne plikisessions_spawn- orkiestracja sesji; zdalne uruchamianie agentów jest RCEsessions_send- wstrzykiwanie wiadomości między sesjamicron- płaszczyzna sterowania trwałą automatyzacjągateway- płaszczyzna sterowania gateway; zapobiega rekonfiguracji przez HTTPnodes- przekaźnik poleceń węzła może dotrzeć do system.run na sparowanych hostachwhatsapp_login- interaktywna konfiguracja wymagająca skanowania kodu QR w terminalu; zawiesza się przez HTTP
Możesz dostosować tę listę odmów przez gateway.tools:
{ gateway: { tools: { // Additional tools to block over HTTP /tools/invoke deny: ["browser"], // Remove tools from the default deny list for owner/admin callers allow: ["gateway"], }, },}gateway.tools.allow jest nadpisaniem ekspozycji, a nie podniesieniem zakresu. W
trybach HTTP przenoszących tożsamość cron, gateway i nodes pozostają niedostępne
dla wywołujących, którzy nie mają tożsamości właściciela/administratora (operator.admin), nawet gdy
są wymienione w gateway.tools.allow. Uwierzytelnianie bearer współdzielonym sekretem nadal stosuje
pełną regułę zaufanego operatora opisaną wyżej.
Aby ułatwić zasadom grup rozpoznawanie kontekstu, opcjonalnie możesz ustawić:
x-openclaw-message-channel: <channel>(przykład:slack,telegram)x-openclaw-account-id: <accountId>(gdy istnieje wiele kont)
Odpowiedzi
200→{ ok: true, result }400→{ ok: false, error: { type, message } }(nieprawidłowe żądanie lub błąd danych wejściowych narzędzia)401→ brak autoryzacji429→ uwierzytelnianie ograniczone limitem szybkości (Retry-Afterustawione)404→ narzędzie niedostępne (nie znaleziono lub brak na liście dozwolonych)405→ metoda niedozwolona500→{ ok: false, error: { type, message } }(nieoczekiwany błąd wykonania narzędzia; komunikat oczyszczony)
Przykład
curl -sS http://127.0.0.1:18789/tools/invoke \ -H 'Authorization: Bearer secret' \ -H 'Content-Type: application/json' \ -d '{ "tool": "sessions_list", "action": "json", "args": {} }'