Der Token war gültig. Mein Headless-Agent erhielt trotzdem einen 401-Fehler.
Ich habe zwei kleine Tools entwickelt, um Claude per Code aufzurufen. Das eine generiert Commit-Messages. Das andere aktualisiert Profile.
Der Code sah perfekt aus. Er holte sich einen API-Key aus der Umgebungsvariable. Er sendete einen rohen HTTPS-Request an die Anthropic API. Er parste die JSON-Antwort.
Er schlug jedes Mal mit einem 401-Fehler fehl.
Das Problem war nicht der Code. Das Problem war die Authentifizierungsmethode.
Ich verwende keinen rohen API-Key. Ich nutze Claude Code über ein Abonnement. Dies nutzt OAuth über das Claude CLI. Das ist ein anderes System als das, das mein Skript erwartete.
Meine Umgebung enthielt einen veralteten oder leeren Wert in der API-Key-Variable. Das Skript sah einen Wert und hielt ihn für gültig. Die Anfrage wurde mit der falschen Art von Anmeldedaten gesendet.
Die Lösung war einfach. Ich habe aufgehört, direkte API-Aufrufe zu tätigen. Stattdessen habe ich meinem Skript gesagt, dass es das CLI nutzen soll, das bereits eine gültige Session hat.
Alter Weg:
Verwende urllib, um eine Anfrage mit einem API-Key zu senden.
Neuer Weg:
Verwende subprocess, um den Befehl „claude“ direkt auszuführen.
Das CLI übernimmt die Session, die Tokens und das Ablaufdatum für dich.
Dieser Fehler ist in Headless-Umgebungen gefährlich. Ein Mensch sieht einen Fehler in einem Terminal. Ein Cron-Job oder eine CI-Pipeline schlägt stillschweigend fehl. Man bemerkt es vielleicht erst nach Tagen.
Diesen gleichen Muster wirst du auch an anderen Stellen sehen:
- Ein Tool sucht nach einem Personal Access Token, aber das System nutzt OIDC.
- Ein Skript liest AWS-Keys, während das System eine IAM-Role nutzt.
Der Token ist vorhanden. Der Token ist korrekt formatiert. Er besteht grundlegende Prüfungen, nutzt aber den falschen Mechanismus.
Befolge diese Regeln, um dies zu vermeiden:
- Finde heraus, wie sich deine Umgebung interaktiv authentifiziert, bevor du Code schreibst. Folge nicht einfach nur der API-Dokumentation.
- Vertraue nicht auf
os.environ. Ein vorhandener Wert könnte veraltet oder falsch sein. - Wenn ein CLI-Tool die Authentifizierung für dich übernimmt, nutze es. Rufe das CLI über die Shell auf, anstatt die Authentifizierungslogik selbst neu zu implementieren.
- Wenn du einen 401-Fehler erhältst, überprüfe deinen Pfad für die Anmeldedaten, bevor du deinen Request-Code änderst.
Quelle: https://dev.to/enjoy_kumawat/the-token-was-valid-my-headless-agent-401d-anyway-3bgl
Optionale Lern-Community: https://t.me/GyaanSetuAi
