ٹوکن درست تھا، لیکن میرا ہیڈ لیس ایجنٹ پھر بھی 401 ایرر دے رہا تھا۔

میں نے کوڈ کے ذریعے Claude کو کال کرنے کے لیے دو چھوٹے ٹولز بنائے تھے۔ ایک کمٹ میسجز (commit messages) جنریٹ کرتا ہے، اور دوسرا پروفائلز اپ ڈیٹ کرتا ہے۔

کوڈ بالکل درست لگ رہا تھا۔ اس نے انوائرمنٹ (environment) سے ایک API key لیتی، Anthropic API کو ایک خام (raw) HTTPS ریکویسٹ بھیجی، اور JSON رسپانس کو پارس (parse) کیا۔

یہ ہر بار 401 ایرر کے ساتھ فیل ہو جاتا تھا۔

مسئلہ کوڈ میں نہیں تھا۔ مسئلہ آتھنٹیکیشن (authentication) کے طریقے میں تھا۔

میں خام API key استعمال نہیں کرتا۔ میں سبسکرپشن کے ذریعے Claude Code استعمال کرتا ہوں۔ یہ Claude CLI کے ذریعے OAuth استعمال کرتا ہے۔ یہ اس سسٹم سے مختلف ہے جس کی میرا اسکرپٹ توقع کر رہا تھا۔

میرے انوائرمنٹ میں API key ویری ایبل کے تحت ایک پرانی (stale) یا خالی ویلیو موجود تھی۔ اسکرپٹ نے ویلیو دیکھی اور سمجھا کہ یہ درست ہے۔ ریکویسٹ غلط قسم کے کریڈنشلز (credentials) کے ساتھ بھیجی گئی۔

حل سادہ تھا۔ میں نے براہ راست API کالز کرنا بند کر دیں۔ اس کے بجائے، میں نے اپنے اسکرپٹ کو وہ CLI استعمال کرنے کا کہا جس میں پہلے سے ہی ایک درست سیشن موجود تھا۔

پرانا طریقہ: urllib کا استعمال کرتے ہوئے API key کے ساتھ ریکویسٹ بھیجیں۔

نیا طریقہ: "claude" کمانڈ کو براہ راست چلانے کے لیے subprocess کا استعمال کریں۔

CLI آپ کے لیے سیشن، ٹوکنز اور ایکسپائری (expiry) کو خود سنبھال لیتا ہے۔

ہیڈ لیس (headless) انوائرمنٹس میں یہ غلطی خطرناک ہے۔ ایک انسان ٹرمینل میں ایرر دیکھ لیتا ہے۔ ایک cron job یا CI پائپ لائن خاموشی سے فیل ہو جاتی ہے۔ ہو سکتا ہے آپ کو کئی دنوں تک اس کا علم نہ ہو۔

آپ کو یہی پیٹرن دوسری جگہوں پر بھی نظر آئے گا:

  • ایک ٹول پرسنل ایکسیس ٹوکن (personal access token) تلاش کرتا ہے لیکن سسٹم OIDC استعمال کرتا ہے۔
  • ایک اسکرپٹ AWS keys پڑھتا ہے جبکہ سسٹم IAM role استعمال کرتا ہے۔

ٹوکن موجود ہے۔ ٹوکن درست فارمیٹ میں ہے۔ یہ بنیادی چیک پاس کر لیتا ہے لیکن غلط میکانزم استعمال کرتا ہے۔

اس سے بچنے کے لیے ان اصولوں پر عمل کریں:

  • کوڈ لکھنے سے پہلے یہ پوچھ لیں کہ آپ کا انوائرمنٹ انٹرایکٹو طریقے سے آتھنٹیکیشن کیسے کرتا ہے۔ صرف API ڈاکومنٹیشن پر بھروسہ نہ کریں۔
  • os.environ پر بھروسہ نہ کریں۔ موجودہ ویلیو پرانی یا غلط ہو سکتی ہے۔
  • اگر کوئی CLI ٹول آپ کے لیے آتھنٹیکیشن سنبھالتا ہے، تو اسے استعمال کریں۔ خود آتھنٹیکیشن لاجک دوبارہ بنانے کے بجائے CLI کو کال کریں۔
  • اگر آپ کو 401 ایرر ملے، تو اپنے ریکویسٹ کوڈ کو تبدیل کرنے سے پہلے اپنے کریڈنشل پاتھ (credential path) کو چیک کریں۔

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

اختیاری لرننگ کمیونٹی: https://t.me/GyaanSetuAi