टोकन वैध होते. तरीही माझ्या हेडलेस एजंटला 401 एरर आला.

मी कोडद्वारे Claude कॉल करण्यासाठी दोन लहान टूल्स बनवले. एक commit messages जनरेट करते. दुसरे प्रोफाइल्स अपडेट करते.

कोड अगदी योग्य वाटत होता. त्याने environment मधून API key घेतला. त्याने Anthropic API ला एक raw HTTPS request पाठवली. त्याने JSON response parse केला.

प्रत्येक वेळी 401 एररसह ते फेल होत होते.

समस्या कोडमध्ये नव्हती. समस्या authentication पद्धतीत होती.

मी raw API key वापरत नाही. मी subscription द्वारे Claude Code वापरतो. हे Claude CLI द्वारे OAuth वापरते. हे माझ्या स्क्रिप्टने अपेक्षित असलेल्या सिस्टमपेक्षा वेगळी आहे.

माझ्या environment मध्ये API key variable अंतर्गत एक जुनी (stale) किंवा रिकामी व्हॅल्यू होती. स्क्रिप्टला एक व्हॅल्यू दिसली आणि तिला वाटले की ती वैध आहे. चुकीच्या प्रकारच्या credential सह रिक्वेस्ट बाहेर गेली.

उपाय सोपा होता. मी थेट API calls करणे थांबवले. त्याऐवजी, मी माझ्या स्क्रिप्टला आधीच वैध session असलेल्या CLI चा वापर करण्यास सांगितले.

जुनी पद्धत: API key सह रिक्वेस्ट पाठवण्यासाठी urllib वापरा.

नवीन पद्धत: "claude" कमांड थेट चालवण्यासाठी subprocess वापरा.

CLI तुमच्यासाठी session, tokens आणि expiry हाताळते.

हेडलेस (headless) environments मध्ये ही चूक धोकादायक आहे. एखादा माणूस टर्मिनलमध्ये एरर पाहू शकतो. पण cron job किंवा CI pipeline शांतपणे (silently) फेल होते. तुम्हाला कित्येक दिवस त्याची जाणीवही होणार नाही.

तुम्हाला इतर ठिकाणीही हाच पॅटर्न पाहायला मिळेल:

  • एखादे टूल personal access token शोधते पण सिस्टम OIDC वापरते.
  • एखादी स्क्रिप्ट AWS keys वाचते तर सिस्टम IAM role वापरते.

टोकन उपलब्ध आहे. टोकन योग्य स्वरूपात आहे. ते मूलभूत तपासण्या (basic checks) पार करते पण चुकीची यंत्रणा (mechanism) वापरते.

हे टाळण्यासाठी या नियमांचे पालन करा:

  • कोड लिहिण्यापूर्वी तुमचे environment इंटरअॅक्टिव्हली (interactively) कसे authenticate होते हे विचारा. फक्त API documentation चे अनुसरण करू नका.
  • os.environ वर विश्वास ठेवू नका. असलेली व्हॅल्यू जुनी किंवा चुकीची असू शकते.
  • जर एखादे CLI tool तुमच्यासाठी authentication हाताळत असेल, तर त्याचा वापर करा. स्वतःचे auth logic पुन्हा तयार करण्याऐवजी CLI चा वापर करा.
  • जर तुम्हाला 401 एरर येत असेल, तर तुमचा request code बदलण्यापूर्वी तुमचा credential path तपासा.

Source: https://dev.to/enjoy_kumawat/the-token-was-valid-my-headless-agent-401d-anyway-3bgl

Optional learning community: https://t.me/GyaanSetuAi