Token był ważny. Mój agent headless i tak zwrócił błąd 401.

Stworzyłem dwa małe narzędzia do wywoływania Claude za pomocą kodu. Jedno generuje wiadomości commitów. Drugie aktualizuje profile.

Kod wyglądał idealnie. Pobierał klucz API ze środowiska. Wysyłał surowe żądanie HTTPS do Anthropic API. Parsował odpowiedź JSON.

Za każdym razem kończyło się błędem 401.

Problem nie leżał w kodzie. Problemem była metoda uwierzytelniania.

Nie używam surowego klucza API. Korzystam z Claude Code w ramach subskrypcji. Wykorzystuje ona OAuth poprzez Claude CLI. Jest to inny system niż ten, którego spodziewał się mój skrypt.

W moim środowisku zmienna klucza API miała nieaktualną lub pustą wartość. Skrypt widział jakąś wartość i uznawał ją za poprawną. Żądanie zostało wysłane z niewłaściwym typem poświadczeń.

Rozwiązanie było proste. Przestałem wykonywać bezpośrednie wywołania API. Zamiast tego poleciłem skryptowi używać CLI, które ma już aktywną sesję.

Stary sposób: Użyj urllib, aby wysłać żądanie z kluczem API.

Nowy sposób: Użyj subprocess, aby bezpośrednio uruchomić polecenie "claude".

CLI zajmuje się sesją, tokenami i wygasaniem za Ciebie.

Ten błąd jest niebezpieczny w środowiskach headless. Człowiek zobaczy błąd w terminalu. Zadanie cron lub potok CI zawiedzie po cichu. Możesz nie zauważyć tego przez wiele dni.

Zauważysz ten sam schemat w innych miejscach:

  • Narzędzie szuka osobistego tokenu dostępu, podczas gdy system używa OIDC.
  • Skrypt odczytuje klucze AWS, podczas gdy system używa roli IAM.

Token jest obecny. Token ma poprawny format. Przechodzi podstawowe kontrole, ale używa niewłaściwego mechanizmu.

Stosuj się do tych zasad, aby tego uniknąć:

  • Zanim zaczniesz pisać kod, sprawdź interaktywnie, w jaki sposób uwierzytelnia Twoje środowisko. Nie polegaj wyłącznie na dokumentacji API.
  • Nie ufaj os.environ. Obecna wartość może być nieaktualna lub błędna.
  • Jeśli narzędzie CLI zajmuje się uwierzytelnianiem za Ciebie, użyj go. Wywołaj CLI z poziomu powłoki, zamiast samodzielnie implementować logikę uwierzytelniania.
  • Jeśli otrzymasz błąd 401, sprawdź ścieżkę poświadczeń, zanim zaczniesz zmieniać kod żądania.

Źródło: https://dev.to/enjoy_kumawat/the-token-was-valid-my-headless-agent-401d-anyway-3bgl

Opcjonalna społeczność edukacyjna: https://t.me/GyaanSetuAi