Node.js میں Google Service Account JWT تیار کرنا

googleapis npm پیکیج Google APIs کے لیے ایک معیار (standard) ہے۔

یہ کام تو کرتا ہے، لیکن یہ آپ کے پروجیکٹ میں 380KB اور 450 سے زیادہ dependencies شامل کر دیتا ہے۔

اگر آپ کو صرف ایک CI اسکرپٹ کے لیے ایک API کی ضرورت ہے، تو آپ کو اتنے زیادہ بوجھ (weight) کی ضرورت نہیں ہے۔

میں نے صرف 60 لائنوں کے کوڈ کا استعمال کرتے ہوئے URL index status چیک کرنے کے لیے ایک اسکرپٹ بنایا ہے۔

یہ تین بلٹ ان (built-in) Node.js ماڈیولز کا استعمال کرتا ہے:

  • crypto
  • fetch
  • URL

یہ آپ کی ریپوزٹری (repository) میں کوئی بھی اضافی پیکیج شامل نہیں کرتا۔

Google service account auth RFC 7523 معیار کی پیروی کرتا ہے۔

یہ رہا طریقہ کار:

  • اپنی client email اور private key کے ساتھ ایک JWT بنائیں۔
  • اس JWT کو Google token endpoint پر POST کریں۔
  • ایک access token حاصل کریں۔
  • اس ٹوکن کو اپنے API request header میں استعمال کریں۔

ایک اہم تفصیل: webmasters scope کا استعمال کریں۔ نیا searchconsole scope URL Inspection API کے لیے کام نہیں کرے گا۔

آپ کو JWT کے لیے Base64url encoding کا استعمال کرنا ہوگا۔ Standard Base64 میں تین تبدیلیاں درکار ہوتی ہیں:

  • Padding کو ختم کریں۔
    • کو - سے بدل دیں۔
  • / کو _ سے بدل دیں۔

Google Cloud سے حاصل کردہ آپ کی private key پہلے سے ہی درست فارمیٹ میں ہوتی ہے۔ ٹوکن کو sign کرنے کے لیے آپ کو بیرونی لائبریریوں کی ضرورت نہیں ہے۔

جب آپ token endpoint کو کال کریں، تو error response کو log کریں۔ Google ناکامی کی مخصوص وجوہات فراہم کرتا ہے، جیسے کہ ایکسپائرڈ (expired) ٹوکن یا سروس اکاؤنٹ کا نہ ہونا۔

خود API کال کے لیے:

  • Authorization header کو Bearer [token] پر سیٹ کریں۔
  • یقینی بنائیں کہ آپ کا siteUrl آپ کی Search Console property سے بالکل مطابقت رکھتا ہو۔
  • اپنی service account email کو Search Console میں ایک صارف (user) کے طور پر شامل کریں۔

یہ طریقہ کار CI pipelines جیسے محدود کاموں کے لیے بہترین ہے۔

اسے استعمال نہ کریں اگر آپ کو درج ذیل کی ضرورت ہے:

  • متعدد Google APIs۔
  • خودکار ٹوکن ریفریش (token refreshes)۔
  • پیچیدہ ری ٹرائی لاجک (retry logic)۔
  • زیادہ پیچیدگی والا پروڈکشن سرور کوڈ۔

ایک واحد CI ٹاسک کے لیے، 450 dependencies کے مقابلے میں 60 لائنوں کا کوڈ بہتر ہے۔ اس بنیادی بہاؤ (raw flow) کو سمجھنے سے لائبریریوں کے ناکام ہونے کی صورت میں ڈیبگنگ (debugging) بھی آسان ہو جاتی ہے۔

ماخذ: https://dev.to/morinaga/rolling-a-google-service-account-jwt-in-nodejs-without-the-googleapis-package-22am