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

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

सुविधा के बारे में जानकारी

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

हाल ही में, सभी Google डेटा 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 डेटा एपीआई का ऐक्सेस मांग रहा है. 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 की समानता:
    ऐक्सेस टोकन के लिए अनुमति पा चुके अनुरोध टोकन की जगह लेने का मतलब, https://www.google.com/accounts/AuthSubRequestToken और https://www.google.com/accounts/AuthSubSessionToken पर लंबे समय तक चलने वाले सेशन टोकन के लिए, एक बार इस्तेमाल होने वाले AuthSub टोकन को अपग्रेड करने जैसा है. अंतर सिर्फ़ यह है कि 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 के लिए सेट किया जाता है.

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

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

बेस स्ट्रिंग फ़ॉर्मैट 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 प्लेग्राउंड टूल

मकसद

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

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

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

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

डेमो रन

पहला चरण: अपने दायरे चुनना

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

AuthSub की समानता:
AuthSub में यह ज़रूरी है कि टोकन की मदद से, डेटा की रेंज को कंट्रोल करने के लिए scope पैरामीटर का इस्तेमाल किया जाए. Google ने यह पैरामीटर OAuth की खास जानकारी में सुझाए गए तरीकों के हिसाब से लागू किया है.

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

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

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

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

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

चरण 3-5: ऐक्सेस टोकन पाना

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

पहले, "टोकन पाएं" बॉक्स में "टोकन का अनुरोध करें" बटन पर क्लिक करें.

कुछ फ़ील्ड में डेटा दिखेगा.

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

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

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

AuthSub की समानता:
यह अनुमति देने वाला पेज, AuthSub के लिए भी ऐसा ही है.

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

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

आखिर में, "टोकन पाएं" बॉक्स में, "ऐक्सेस टोकन" बटन पर क्लिक करें.

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

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

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

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

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

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

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

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

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

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

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

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

सर्वर 200 OK में जवाब देगा.

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

नतीजा

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

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

रिसॉर्स