Node.js मध्ये Google Service Account JWT तयार करणे

बहुतेक डेव्हलपर्स Google APIs कॉल करण्यासाठी googleapis npm पॅकेज वापरतात. ते चांगले काम करते. परंतु, यामुळे तुमच्या प्रोजेक्टमध्ये ३८०KB आणि ४५० पेक्षा जास्त dependencies वाढतात.

जर तुम्हाला साध्या CI स्क्रिप्टसाठी फक्त एकाच API ची गरज असेल, तर हे खूप जास्त (overkill) आहे.

मी फक्त तीन Node.js built-ins वापरून URL इंडेक्स स्टेटस तपासण्यासाठी एक स्क्रिप्ट तयार केली आहे: crypto, fetch, आणि URL. यामध्ये कोणत्याही बाह्य (external) पॅकेजचा वापर केलेला नाही.

ऑथेंटिकेशन (Authentication) RFC 7523 चे पालन करते. ते कसे करायचे ते खाली दिले आहे:

  • तुमच्या service account ईमेल आणि private key वापरून एक JWT तयार करा.
  • तो JWT Google token endpoint वर POST करा.
  • एक अल्पकाळ टिकणारा (short-lived) access token प्राप्त करा.
  • तुमच्या API विनंत्यांसाठी (requests) तो token Bearer header म्हणून वापरा.

JWT साठी खालील claims आवश्यक आहेत:

  • iss: तुमचा client ईमेल.
  • scope: webmasters.readonly.
  • aud: Google token URL.
  • iat: सध्याची वेळ.
  • exp: सध्याची वेळ अधिक ३६०० सेकंद.

टीप: webmasters scope वापरा. नवीन searchconsole scope URL Inspection API साठी काम करत नाही.

कठीण भाग म्हणजे Base64url encoding. ते सुसंगत (compatible) करण्यासाठी तुम्हाला padding काढून टाकणे आणि अक्षरे बदलणे आवश्यक आहे. तुम्ही तुमच्या RSA private key ने JWT साइन करण्यासाठी node:crypto मॉड्यूल वापरू शकता. तुमच्या Google Cloud JSON फाईलमधील key थेट वापरता येते.

जेव्हा तुम्ही token एक्सचेंज करता, तेव्हा raw error response लॉग करा. Google "Service account not found" सारखे विशिष्ट संदेश देते. यामुळे तुम्हाला त्रुटी (errors) वेगाने सुधारण्यास मदत होते.

हा दृष्टिकोन खालील परिस्थितीत सर्वोत्तम काम करतो:

  • तुम्ही CI pipeline मध्ये एकच API वापरत असाल.
  • तुम्हाला तुमचे repo हलके (light) ठेवायचे असेल.
  • तुम्हाला auth flow समजून घ्यायचा असेल.

खालील परिस्थितीत याचा वापर करू नका:

  • तुम्ही अनेक वेगवेगळ्या Google APIs कॉल करत असाल.
  • तुम्हाला ऑटोमॅटिक token refreshing ची गरज असेल.
  • तुम्ही एक मोठा production server तयार करत असाल.

मर्यादित कामांसाठी (narrow tasks) शेकडो लपलेल्या dependencies पेक्षा लहान आणि वाचनीय कोड अधिक चांगला असतो.

स्त्रोत: https://dev.to/morinaga/rolling-a-google-service-account-jwt-in-nodejs-without-the-googleapis-package-22am