Google Data API के साथ OAuth का इस्तेमाल करना

एरिक बिडेलमैन, Google Data APIs टीम
सितंबर 2008

परिचय

डेवलपर के लिए, यह एक बेहतरीन समय है. हमें वेब पर कई ओपन स्टैंडर्ड अपनाए जाते हुए दिख रहे हैं. जैसा कि आपको पता है, Google हमेशा से ही स्टैंडर्ड का बहुत बड़ा समर्थक रहा है. साथ ही, वह ओपन सोर्स कम्यूनिटी को बढ़ावा देता रहा है.

हाल ही में, सभी Google Data API ने OAuth के साथ काम करने की सुविधा को अपनाया है. यह एक ओपन प्रोटोकॉल है. इसका मकसद, डेस्कटॉप और वेब ऐप्लिकेशन के ज़रिए किसी उपयोगकर्ता के निजी डेटा को ऐक्सेस करने के तरीके को स्टैंडर्ड बनाना है. OAuth, एपीआई की पुष्टि करने का एक स्टैंडर्ड और सुरक्षित तरीका है. प्रोग्रामर के तौर पर, हमें यह सिखाया जाता है कि जहां भी मुमकिन हो, कोड का दोबारा इस्तेमाल करें. OAuth की मदद से, डेवलपर को डुप्लीकेट कोड कम लिखना होगा. साथ ही, ऐसे टूल बनाना आसान हो जाएगा जो अलग-अलग कंपनियों की कई सेवाओं के साथ काम करते हैं.

ऑडियंस

इस लेख में यह माना गया है कि आपको Google Data API के बारे में जानकारी है. हालांकि, OAuth के बारे में जानकारी होना ज़रूरी नहीं है. अगर आपको OAuth के बारे में जानकारी चाहिए या आपने हाल ही में इसका इस्तेमाल शुरू किया है, तो यह लेख आपके लिए है. इस लेख में, आपको इन कॉन्सेप्ट के बारे में बुनियादी जानकारी मिलेगी. मैं Google के OAuth को लागू करने के बारे में भी जानकारी दूँगा.

यह दस्तावेज़ उन डेवलपर के लिए भी है जो AuthSub का इस्तेमाल करना जानते हैं. खास तौर पर, बेहतर सुरक्षा के साथ रजिस्टर किए गए मोड में. हम आगे बढ़ते हुए, दोनों प्रोटोकॉल के बीच समानताएं और अंतर हाइलाइट करने की कोशिश करेंगे. अगर आपके पास ऐसे ऐप्लिकेशन हैं जो AuthSub का इस्तेमाल करते हैं, तो इस जानकारी का इस्तेमाल करके OAuth पर माइग्रेट किया जा सकता है. यह ज़्यादा ओपन और मॉडर्न प्रोटोकॉल है.


कुछ शब्दावली

OAuth को समझने के लिए, इससे जुड़ी शब्दावली को समझना ज़रूरी है. OAuth स्पेसिफ़िकेशन और Google के वेब ऐप्लिकेशन के लिए OAuth ऑथेंटिकेशन दस्तावेज़ में कुछ परिभाषाओं का इस्तेमाल किया गया है. इसलिए, आइए जानते हैं कि Google के OAuth को लागू करने के संदर्भ में, हर परिभाषा का क्या मतलब है.

  1. "OAuth डांस"

    यह OAuth की पुष्टि करने/अनुमति देने की पूरी प्रोसेस को बताने के लिए इस्तेमाल किया जाने वाला मेरा अनौपचारिक शब्द है.

  2. (OAuth) अनुरोध टोकन

    यह एक शुरुआती टोकन होता है. इससे Google को पता चलता है कि आपका ऐप्लिकेशन, Google Data API में से किसी एक को ऐक्सेस करने का अनुरोध कर रहा है. OAuth डांस के दूसरे चरण में, उपयोगकर्ता को अपने डेटा का ऐक्सेस मैन्युअल तरीके से देना होता है. यह चरण पूरा होने के बाद, अनुरोध टोकन को अनुमति मिल जाती है.

  3. (OAuth) ऐक्सेस टोकन

    इस प्रोसेस का आखिरी चरण, ऑथराइज़ किए गए अनुरोध टोकन को ऐक्सेस टोकन के लिए बदलना है. आपके ऐप्लिकेशन के पास यह टोकन होने पर, उपयोगकर्ता को OAuth की प्रोसेस से दोबारा नहीं गुज़रना पड़ेगा. हालांकि, ऐसा तब तक होगा, जब तक टोकन रद्द नहीं कर दिया जाता.

    AuthSub से मिलता-जुलता:
    OAuth ऐक्सेस टोकन, सुरक्षित AuthSub सेशन टोकन की तरह ही होता है.

  4. (OAuth) एंडपॉइंट

    ये ऐसे यूआरआई हैं जिनकी ज़रूरत किसी ऐप्लिकेशन की पुष्टि करने और ऐक्सेस टोकन पाने के लिए होती है. कुल तीन कुकी होती हैं. हर कुकी, OAuth प्रोसेस के हर चरण के लिए होती है. Google के OAuth एंडपॉइंट ये हैं:

    अनुरोध टोकन पाना:https://www.google.com/accounts/OAuthGetRequestToken
    अनुरोध टोकन को अनुमति दें:https://www.google.com/accounts/OAuthAuthorizeToken
    ऐक्सेस टोकन में अपग्रेड करने के लिए:https://www.google.com/accounts/OAuthGetAccessToken

    AuthSub से समानता:
    अनुमति वाले अनुरोध टोकन को ऐक्सेस टोकन के लिए एक्सचेंज करना, एक बार इस्तेमाल किए जा सकने वाले AuthSub टोकन को https://www.google.com/accounts/AuthSubRequestToken और https://www.google.com/accounts/AuthSubSessionToken पर, लंबे समय तक इस्तेमाल किए जा सकने वाले सेशन टोकन में अपग्रेड करने जैसा है. इन दोनों में फ़र्क़ यह है कि AuthSub में, शुरुआती अनुरोध टोकन का कॉन्सेप्ट नहीं है. इसके बजाय, उपयोगकर्ता AuthSubRequestToken अनुमति वाले पेज से टोकन प्रोसेस शुरू करता है.

  5. (OAuth) सेवा देने वाली कंपनी

    Google Data API के मामले में, यह सेवा देने वाली कंपनी Google है. आम तौर पर, सेवा देने वाली कंपनी का इस्तेमाल उस वेबसाइट या वेब सेवा के बारे में बताने के लिए किया जाता है जो OAuth एंडपॉइंट उपलब्ध कराती है. OAuth की सेवा देने वाली कंपनी का एक और उदाहरण MySpace है.

  6. (OAuth) उपभोक्ता

    वह प्रोग्राम जो किसी उपयोगकर्ता के डेटा को ऐक्सेस करने की अनुमति मांग रहा है. जैसे, आपका ऐप्लिकेशन. OAuth प्रोटोकॉल का इस्तेमाल कई तरह के क्लाइंट (वेब, इंस्टॉल किया गया, डेस्कटॉप, मोबाइल) के लिए किया जा सकता है.

ध्यान दें: OAuth प्रोटोकॉल, डेस्कटॉप/इंस्टॉल किए गए ऐप्लिकेशन के इस्तेमाल के उदाहरण के साथ काम करता है. हालांकि, Google सिर्फ़ वेब ऐप्लिकेशन के लिए OAuth का इस्तेमाल करता है.

शुरू करें

रजिस्ट्रेशन

Google Data API के साथ OAuth का इस्तेमाल शुरू करने से पहले, आपको कुछ सेटअप करना होगा. सभी OAuth अनुरोधों पर डिजिटल हस्ताक्षर होना ज़रूरी है. इसलिए, आपको पहले अपने डोमेन को रजिस्टर करना होगा और Google पर सार्वजनिक सर्टिफ़िकेट अपलोड करना होगा. इसे करने के तरीके के बारे में ज़्यादा जानने के लिए, वेब पर आधारित ऐप्लिकेशन के लिए रजिस्ट्रेशन और रजिस्टर्ड मोड के साथ इस्तेमाल करने के लिए कुंजियां और सर्टिफ़िकेट जनरेट करना लेख पढ़ें.

हस्ताक्षर करने के अनुरोध

डोमेन रजिस्टर होने के बाद, अनुरोधों पर हस्ताक्षर किए जा सकते हैं. OAuth के सबसे मुश्किल कॉन्सेप्ट में से एक यह है कि oauth_signature को सही तरीके से कैसे बनाया जाए. साथ ही, सिग्नेचर बेस स्ट्रिंग का कॉन्सेप्ट भी मुश्किल है. बेस स्ट्रिंग वह डेटा होता है जिस पर अपनी निजी कुंजी (RSA_SHA1 का इस्तेमाल करके) से हस्ताक्षर किया जाता है. नतीजा वह वैल्यू होती है जिसे आपने oauth_signature के लिए सेट किया है.

अनुरोध का उदाहरण

GET पर उपयोगकर्ता के Google Calendar की सूची http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime

बेस स्ट्रिंग का फ़ॉर्मैट base_string = http-method&base-http-request-url&normalized-string-of-oauth_parameters
बेस स्ट्रिंग का उदाहरण GET&http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull&oauth_consumer_key%3Dexample.com%26oauth_nonce%3D4572616e48616d6d%26oauth_signature_method%3DRSA-SHA1%26oauth_timestamp%3D137131200%26oauth_token%3D1%252Fab3cd9j4ks73hf7g%26oauth_version%3D1.0%26orderby%3Dstarttime
एचटीटीपी अनुरोध का उदाहरण
GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime HTTP/1.1
Host:  http://www.google.com
Content-Type: application/atom+xml
Authorization: OAuth oauth_token="1%2Fab3cd9j4ks73hf7g", oauth_signature_method="RSA-SHA1", oauth_signature="wOJIO9AvZbTSMK%2FPY%3D...", oauth_consumer_key="example.com", oauth_timestamp="137131200", oauth_nonce="4572616e48616d6d", oauth_version="1.0"

ध्यान दें: यह सिर्फ़ दिखाने के लिए है. आपका oauth_signature बहुत लंबा होगा.

बेस स्ट्रिंग के बारे में अहम जानकारी:

  • orderby=starttime क्वेरी पैरामीटर को, लेक्सिकोग्राफ़िकल बाइट वैल्यू के क्रम में, बाकी oauth_* पैरामीटर के साथ क्रम से लगाया जाता है.
  • इस स्ट्रिंग में भी '?' वर्ण नहीं है.
  • base-http-request-url वाले हिस्से में, सिर्फ़ यूआरएल के तौर पर कोड में बदला गया बेस यूआरएल होता है: http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull.
  • oauth_token को दो बार यूआरएल-कोड में बदला गया है.

Authorization हेडर के बारे में नोट:

  • Authorization हेडर में oauth_* पैरामीटर के क्रम से कोई फ़र्क़ नहीं पड़ता.
  • हेडर में orderby=starttime शामिल नहीं है, जबकि बेस स्ट्रिंग में शामिल था. क्वेरी पैरामीटर को अनुरोध यूआरएल के हिस्से के तौर पर बनाए रखा जाता है.

OAuth का इस्तेमाल करके अनुरोधों पर हस्ताक्षर करने के बारे में ज़्यादा जानने के लिए, OAuth अनुरोधों पर हस्ताक्षर करना लेख पढ़ें.

AuthSub से अंतर:
तुलना के लिए, यहां सुरक्षित AuthSub का इस्तेमाल करके वही उदाहरण दिया गया है:

बेस स्ट्रिंग का फ़ॉर्मैट base_string = http-method http-request-URL timestamp nonce
बेस स्ट्रिंग का उदाहरण
GET http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull%3Forderby%3Dstarttime 137131200 4572616e48616d6d
एचटीटीपी अनुरोध का उदाहरण
GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime HTTP/1.1
Host:  http://www.google.com
Content-Type: application/atom+xml
Authorization: AuthSub token="GD32CMCL25aZ-v____8B" data="GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime 137131200 4572616e48616d6d" sig="MCwCFrV93K4agg==..." sigalg="rsa-sha1"

AuthSub का इस्तेमाल करके अनुरोधों पर हस्ताक्षर करने के बारे में ज़्यादा जानने के लिए, AuthSub अनुरोधों पर हस्ताक्षर करना लेख पढ़ें.

OAuth Playground टूल

मकसद

कुछ उपयोगकर्ताओं का सुझाव है कि OAuth को समझना मुश्किल है. Google के अन्य पुष्टि करने वाले एपीआई की तुलना में, मैं इससे सहमत हूं. OAuth का फ़ायदा तब दिखेगा, जब आपको अपने ऐप्लिकेशन को Google के अलावा अन्य सेवाओं के साथ इंटिग्रेट करना होगा. एक ऐसा पुष्टि करने वाला कोड लिखना जो सेवा देने वाली अलग-अलग कंपनियों और उनके एपीआई पर काम करे, यह मेरे लिए बहुत अच्छा है. प्रोटोकॉल के बारे में अभी जानने से, आपको बाद में फ़ायदा होगा.

OAuth Playground एक टूल है. इसे मैंने डेवलपर की OAuth से जुड़ी समस्याओं को हल करने के लिए बनाया है. Playground का इस्तेमाल इन कामों के लिए किया जा सकता है: समस्याओं को ठीक करना, खुद के लागू किए गए कोड की जांच करना या Google Data APIs के साथ एक्सपेरिमेंट करना.

यह कैसे काम करता है?

  1. इस इमेज में OAuth की पुष्टि करने का फ़्लो दिखाया गया है. इसमें अनुरोध टोकन फ़ेच करना, टोकन को अनुमति देना, और उसे ऐक्सेस टोकन में अपग्रेड करना शामिल है.
  2. यह हर अनुरोध के लिए, सही सिग्नेचर बेस स्ट्रिंग दिखाता है.
  3. हर अनुरोध के लिए सही Authorization हेडर दिखाता है.
  4. इस उदाहरण में, पुष्टि किए गए Google डेटा फ़ीड के साथ इंटरैक्ट करने के लिए, oauth_token का इस्तेमाल करने का तरीका दिखाया गया है. आपके पास GET/POST/PUT/DELETE डेटा का विकल्प होता है.
  5. पुष्टि किए गए फ़ीड को सीधे अपने ब्राउज़र में देखें.
  6. इससे आपको अपने oauth_consumer_key (आपका रजिस्टर किया गया डोमेन) और निजी पासकोड को टेस्ट करने की अनुमति मिलती है.
  7. जानें कि आपके oauth_token के लिए, Google Data feed की कौनसी सेवाएं उपलब्ध हैं.

डेमो रन

पहला चरण: अपने स्कोप चुनें

सबसे पहले, एक या उससे ज़्यादा स्कोप चुनकर यह तय करें कि आपको किन एपीआई का इस्तेमाल करना है. इस डेमो में, मैं एक ऐसे टोकन का अनुरोध कर रहा हूं जो Blogger और Google Contacts के साथ काम करेगा.

AuthSub से मिलती-जुलती सुविधा:
AuthSub में भी scope पैरामीटर की ज़रूरत होती है. इससे यह कंट्रोल किया जा सकता है कि कोई टोकन किस तरह के डेटा को ऐक्सेस कर सकता है. Google ने इस पैरामीटर को OAuth स्पेसिफ़िकेशन में दिए गए सुझाव के मुताबिक लागू किया है.

दूसरा चरण: OAuth पैरामीटर और सेटिंग में बदलाव करना

फ़िलहाल, "OAuth पैरामीटर में बदलाव करें" बॉक्स में कोई भी सेटिंग न बदलें. बाद में, अपनी निजी कुंजी का इस्तेमाल करके टेस्ट किया जा सकता है. इसके लिए, oauth_consumer_key को अपने रजिस्टर किए गए डोमेन में बदलें. इसके बाद, "अपनी निजी कुंजी का इस्तेमाल करें" पर क्लिक करके अपनी निजी कुंजी डालें. कृपया सिर्फ़ TEST निजी कुंजी का इस्तेमाल करें.

ध्यान दें: यहां सिर्फ़ oauth_signature_method और oauth_consumer_key फ़ील्ड में बदलाव किया जा सकता है. oauth_timestamp, oauth_nonce, और oauth_token आपके लिए अपने-आप जनरेट हो जाएंगे.

RSA-SHA1 के अलावा, oauth_signature_method के लिए HMAC-SHA1 का इस्तेमाल किया जा सकता है. ऐसे में, Playground में अतिरिक्त बॉक्स दिखेंगे. इनमें आपको अपना oauth_consumer_key और उपभोक्ता सीक्रेट डालना होगा. ये वैल्यू, रजिस्टर किए गए डोमेन के लिए https://www.google.com/accounts/ManageDomains पेज पर देखी जा सकती हैं.

AuthSub से अंतर:
सुरक्षित AuthSub में, डोमेन नेम को साफ़ तौर पर सेट करने के लिए कोई पैरामीटर नहीं होता. डोमेन को next यूआरएल पैरामीटर के हिस्से के तौर पर शामिल किया जाता है. OAuth में ऐसा पैरामीटर मौजूद है: oauth_consumer_key. इसे अपने रजिस्टर किए गए डोमेन पर सेट करें.

तीसरा से पाँचवाँ चरण: ऐक्सेस टोकन पाना

OAuth ऐक्सेस टोकन पाने के लिए, तीन चरण पूरे करने होते हैं. पहला चरण, अनुरोध टोकन वापस पाना है. इससे Google को पता चलता है कि आपका ऐप्लिकेशन, OAuth डांस शुरू कर रहा है.

सबसे पहले, "Get the Token" बॉक्स में मौजूद "Request token" बटन पर क्लिक करें.

कुछ फ़ील्ड में डेटा अपने-आप भर जाएगा.

  • "हस्ताक्षर के लिए इस्तेमाल की गई बेस स्ट्रिंग" में, oauth_signature पैरामीटर बनाने के लिए इस्तेमाल की गई बेस स्ट्रिंग का सही फ़ॉर्म दिखता है.
  • "Authorization header" में, अनुरोध के लिए Authorization हेडर दिखता है.
  • अनुरोध में भेजी गई oauth_nonce और oauth_timestamp वैल्यू से भरा हुआ "OAuth पैरामीटर में बदलाव करें" बॉक्स.
  • oauth_token इनपुट में, रिस्पॉन्स बॉडी में दिखाई गई वैल्यू अपने-आप भर गई थी. Playground में यह भी दिखता है कि फ़िलहाल हमारे पास किस तरह का oauth_token है. फ़िलहाल, यह एक अनुरोध टोकन है.

इसके बाद, "टोकन पाएं" बॉक्स में मौजूद "अनुमति दें" बटन पर क्लिक करें.

इस अनुमति वाले पेज पर, "ऐक्सेस दें" बटन पर क्लिक करें. इससे अनुरोध टोकन को अनुमति मिल जाएगी और आपको वापस OAuth Playground पर रीडायरेक्ट कर दिया जाएगा.

AuthSub से मिलता-जुलता:
यह ऑथराइज़ेशन पेज, AuthSub के लिए भी एक जैसा है.

AuthSub से अंतर:
AuthSub का next यूआरएल पैरामीटर, oauth_callback पैरामीटर के जैसा ही होता है. इनमें अंतर यह है कि OAuth में oauth_callback वैकल्पिक होता है. जब उपयोगकर्ता "ऐक्सेस दें" बटन पर क्लिक करता है, तब अनुरोध टोकन को अनुमति मिल जाती है. इसके बाद, टोकन को https://www.google.com/accounts/OAuthGetAccessToken में अपग्रेड करने की प्रोसेस को एसिंक्रोनस तरीके से पूरा किया जा सकता है.

सलाह: अगर आपको कोई वेब ऐप्लिकेशन लिखना है, तो oauth_callback यूआरएल तय करना बेहतर होता है. इससे उपयोगकर्ता को बेहतर अनुभव मिलता है.

आखिर में, "Get the Token" बॉक्स में मौजूद "Access token" बटन पर क्लिक करें.

इस कार्रवाई से, अनुमति वाले अनुरोध टोकन को अपग्रेड किया जाता है. इसे लाल रंग के "ऐक्सेस टोकन" लेबल से दिखाया गया है.

अगर आपको नया टोकन पाना है, तो OAuth की प्रोसेस को फिर से शुरू करने के लिए, "फिर से शुरू करें" पर क्लिक करें.

अब हम कुछ दिलचस्प काम कर सकते हैं!

ऐक्सेस टोकन का इस्तेमाल करना

अब फ़ीड से क्वेरी की जा सकती है. साथ ही, डेटा डाला, अपडेट किया या मिटाया जा सकता है. कृपया इन तीन एचटीटीपी तरीकों का इस्तेमाल करते समय सावधानी बरतें, क्योंकि आप अपने असली डेटा के साथ काम कर रहे हैं!

अहम जानकारी: अपने ऐक्सेस टोकन के लिए उपलब्ध फ़ीड ढूंढने के लिए, "उपलब्ध फ़ीड" बटन पर क्लिक करें.

यहां क्वेरी का एक उदाहरण दिया गया है: GET http://www.blogger.com/feeds/1982051675575479214/posts/default?max-results=3

इस उदाहरण में, किसी ब्लॉग पर तीन से ज़्यादा पोस्ट नहीं दिखाई जाती हैं. सिंटैक्स हाइलाइट किए गए सेक्शन के नीचे मौजूद "ब्राउज़र में देखें" लिंक पर क्लिक करके, सीधे अपने ब्राउज़र में भी वापस भेजे गए फ़ीड/एंट्री को देखा जा सकता है.

उदाहरण: पोस्ट को अपडेट करने का तरीका

  1. उस पोस्ट में <link> एलिमेंट ढूंढें जिसे आपको अपडेट करना है. इसके साथ rel="edit" मौजूद होगा. यह कुछ ऐसा दिखना चाहिए:
    <link rel="edit" href="http://www.blogger.com/feeds/1982051675575479214/posts/default/8138973184593279875"/>

    href यूआरएल को "Google डेटा फ़ीड डालें" इनपुट में चिपकाएं.

  2. सिंटैक्स हाइलाइट किए गए पैनल में सबसे ऊपर मौजूद, "व्यू प्लेन" पर क्लिक करके, मौजूदा एंट्री के एक्सएमएल को कॉपी करें. सिर्फ़ रिस्पॉन्स बॉडी को कॉपी करें, हेडर को नहीं.
  3. एचटीटीपी तरीके वाले ड्रॉपडाउन को PUT पर सेट करें.
  4. उस ड्रॉपडाउन के नीचे मौजूद, "पोस्ट का डेटा डालें" पर क्लिक करें. इसके बाद, पॉप-अप में <entry> एक्सएमएल चिपकाएं.
  5. "लागू करें" बटन पर क्लिक करें.

सर्वर, 200 OK के साथ जवाब देगा.

अहम जानकारी: edit लिंक को मैन्युअल तरीके से कॉपी करने के बजाय, 'सिंटैक्स हाइलाइट करें?' चेकबॉक्स से सही का निशान हटाएं. क्वेरी के बाद, आपको एक्सएमएल रिस्पॉन्स बॉडी में मौजूद लिंक पर क्लिक करने का विकल्प मिलेगा.

नतीजा

AtomPub/Atom Publishing Protocol (Google Data APIs का बुनियादी प्रोटोकॉल) और OAuth जैसी टेक्नोलॉजी, वेब को आगे बढ़ाने में मदद करती हैं. ज़्यादा से ज़्यादा साइटें इन स्टैंडर्ड को अपना रही हैं. इसलिए, हम डेवलपर को इसका फ़ायदा मिल रहा है. इससे, बेहतरीन ऐप्लिकेशन बनाना आसान हो जाता है.

अगर आपको OAuth Playground या Google API के साथ OAuth का इस्तेमाल करने के बारे में कोई सवाल पूछना है या कोई टिप्पणी करनी है, तो कृपया G Suite API और Marketplace API के सहायता फ़ोरम पर जाएं.

संसाधन