Node.js मध्ये Google Service Account JWT तयार करणे
googleapis npm package हे Google APIs साठी एक मानक (standard) आहे.
ते काम करते. पण ते तुमच्या प्रोजेक्टमध्ये 380KB आणि 450 पेक्षा जास्त dependencies जोडते.
जर तुम्हाला CI script साठी फक्त एकाच API ची गरज असेल, तर तुम्हाला इतक्या मोठ्या पॅकेजची गरज नाही.
मी फक्त 60 ओळींच्या कोडचा वापर करून URL index status तपासण्यासाठी एक script तयार केली आहे.
यामध्ये तीन built-in Node.js modules वापरले आहेत:
- crypto
- fetch
- URL
हे तुमच्या repository मध्ये एकही package जोडत नाही.
Google service account auth हे RFC 7523 standard चे पालन करते.
प्रक्रिया खालीलप्रमाणे आहे:
- तुमच्या client email आणि private key वापरून एक JWT तयार करा.
- तो JWT Google token endpoint वर POST करा.
- access token प्राप्त करा.
- तो token तुमच्या API request header मध्ये वापरा.
एक महत्त्वाची गोष्ट: webmasters scope वापरा. नवीन searchconsole scope URL Inspection API साठी काम करणार नाही.
JWT साठी तुम्हाला Base64url encoding वापरणे आवश्यक आहे. Standard Base64 साठी तीन बदल करावे लागतात:
- Padding काढून टाका.
- च्या जागी - वापरा.
- / च्या जागी _ वापरा.
Google Cloud कडून मिळालेली तुमची private key आधीच योग्य format मध्ये असते. Token sign करण्यासाठी तुम्हाला कोणत्याही external libraries ची गरज नाही.
जेव्हा तुम्ही token endpoint ला कॉल करता, तेव्हा error response log करा. Google त्रुटींसाठी (failures) विशिष्ट कारणे देते, जसे की expired tokens किंवा missing service accounts.
API call साठी:
- Authorization header Bearer [token] असा सेट करा.
- तुमचे siteUrl तुमच्या Search Console property शी तंतोतंत जुळते याची खात्री करा.
- तुमच्या service account email ला Search Console मध्ये एक user म्हणून जोडा.
हा दृष्टिकोन CI pipelines सारख्या मर्यादित कामांसाठी सर्वोत्तम आहे.
जर तुम्हाला खालील गोष्टींची गरज असेल, तर याचा वापर करू नका:
- Multiple Google APIs.
- Automatic token refreshes.
- Complex retry logic.
- उच्च जटिलता (high complexity) असलेले production server code.
एका सिंगल CI टास्कसाठी, 450 dependencies पेक्षा 60 ओळींचा कोड अधिक चांगला आहे. हा raw flow समजून घेतल्यामुळे libraries fail झाल्यावर debugging करणे देखील सोपे जाते.