Fitbit में AuthSub का इस्तेमाल करना

इस दस्तावेज़ में, Flash या Silverlight ऐप्लिकेशन से Google के AuthSub की पुष्टि करने वाले सिस्टम को इस्तेमाल करने का तरीका बताया गया है.

ध्यान दें: अगर आपको AuthSub के बारे में पहले से जानकारी है, तो यह Google की वेब-आधारित ऐप्लिकेशन के लिए खाते की पुष्टि करने की सेवा है. आपको पता चलेगा कि सिद्धांत के तौर पर PostgreSQL के लिए यह सिद्धांत काफ़ी हद तक मिलता-जुलता है. इसमें अंतर लागू करने का तरीका अलग है, लेकिन क्लाइंट ऐप्लिकेशन डेवलपर के तौर पर, आपके लिए यह अंतर अहम नहीं है. कुछ दस्तावेज़ों में, जिन विषयों में अंतर काम का नहीं है वहां हम शॉर्ट वीडियो के लिए, AuthSub के लिए AuthSub को "AuthSub" कहते हैं.

Fitbit के AuthSub के इंटरफ़ेस की मदद से Flash या Silverlight ऐप्लिकेशन किसी उपयोगकर्ता की ओर से सुरक्षित Google Data API फ़ीड की पुष्टि करते हैं. उच्च स्तर की सुरक्षा बनाए रखने के लिए, इंटरफ़ेस ऐप्लिकेशन को उपयोगकर्ता की खाता प्रवेश जानकारी प्रबंधित किए बिना प्रमाणीकरण टोकन पाने देता है.

PostgreSQL के लिए AuthSub, JavaScript के लिए AuthSub का एक प्रकार है. JavaScript के लिए AuthSub की तरह, यह क्लाइंट ऐप्लिकेशन को गैर-Google डोमेन पर होस्ट किए गए किसी वेब पेज से प्रमाणीकृत करने के लिए क्रॉस-डोमेन विधि उपलब्ध कराता है. यह मानक AuthSub से अलग है, जिसमें पुष्टि करने की सेवा किसी अलग डोमेन (www.google.com के बजाय accounts.googleapis.com) पर होती है और बाहरी साइट से उस डोमेन को ऐक्सेस करने की अनुमति देने वाली एक crossdomain.xml फ़ाइल उपलब्ध कराती है.

पुष्टि करने की सेवा देने वाले सभी एपीआई के इस्तेमाल पर चर्चा करने के लिए, Google खातों का एपीआई ग्रुप भी देखें.

दर्शक

यह दस्तावेज़ उन प्रोग्रामर के लिए है जो Google की सेवाओं को ऐक्सेस करने वाले फ़्लैश या Silverlight वेब ऐप्लिकेशन बना रहे हैं.

यह दस्तावेज़ यह मान लेता है कि आप Google Data API प्रोटोकॉल और AuthSub इंटरफ़ेस के पीछे के सामान्य विचारों को समझते हैं. इसमें यह भी माना जाता है कि आपको Actionscript का इस्तेमाल करना आता है.

काम करने वाले एनवायरमेंट

फ़िलहाल, Firefox के लिए AuthSub 1.5 और इसके बाद के वर्शन और Internet Explorer 6.0 और इसके बाद के वर्शन पर काम करता है. इसके लिए, Flash 9.0 या इसके बाद के वर्शन या Silverlight 2.0 या इसके बाद के वर्शन का इस्तेमाल किया जा सकता है.

Fitbit के लिए AuthSub कैसे काम करता है

यहां वेब ऐप्लिकेशन, Google पुष्टि सेवा, और Google डेटा सेवा के बीच बातचीत के काम करने के तरीके की खास जानकारी दी गई है:

  1. उपयोगकर्ता की ओर से Google डेटा सेवा को ऐक्सेस करने के लिए, वेब ऐप्लिकेशन में एक मान्य पुष्टि टोकन होना चाहिए. आम तौर पर, ऐप्लिकेशन इस टोकन को कुकी में स्टोर करते हैं. अगर ऐसी कोई कुकी मौजूद नहीं है, तो वेब ऐप्लिकेशन को AuthSub के ज़रिए टोकन पाना होगा. टोकन पाने के लिए, वेब ऐप्लिकेशन पुष्टि करने वाली सेवा के लिए AuthSub के लिए लॉग इन करता है. इसके बाद, वह सेवा तय करता है जिसे ऐक्सेस किया जाना है.
  2. वेब ऐप्लिकेशन से अनुरोध मिलने पर, पुष्टि करने की सेवा उपयोगकर्ता को "ऐक्सेस का अनुरोध" पेज पर रीडायरेक्ट करती है. इस पेज पर, लोगों से उनके Google खाते में लॉग इन करने और उन्हें Google की किसी सेवा का ऐक्सेस देने या न देने को कहा जाता है.
  3. उपयोगकर्ता यह तय करता है कि उसे वेब ऐप्लिकेशन का ऐक्सेस दिया जाए या नहीं. अगर उपयोगकर्ता ऐक्सेस देने से मना कर देता है, तो उसे वेब ऐप्लिकेशन पर वापस ले जाने के बजाय Google पेज पर भेज दिया जाता है.
  4. अगर उपयोगकर्ता सफलतापूर्वक लॉग इन करता है और ऐक्सेस देता है, तो पुष्टि करने की सेवा उपयोगकर्ता को वापस मूल वेब ऐप्लिकेशन के यूआरएल पर रीडायरेक्ट कर देती है. रीडायरेक्ट, क्वेरी पैरामीटर की मदद से बताई गई सेवा के लिए पुष्टि करने वाला टोकन डिलीवर करता है. ऐप्लिकेशन को टोकन को उपयोगकर्ता के ब्राउज़र में, वेब ऐप्लिकेशन के डोमेन के तहत कुकी के तौर पर सेव करना चाहिए. टोकन को तब तक मान्य किया जाता है, जब तक उसे निरस्त नहीं किया जाता. (टोकन निरस्त करने की सलाह के लिए, टोकन के बारे में जानकारी सेक्शन देखें.)
  5. वेब ऐप्लिकेशन, Google डेटा सेवा से संपर्क करता है और सेवा को भेजे गए हर अनुरोध के साथ पुष्टि करने वाला टोकन भेजता है.
  6. अगर Google की डेटा सेवा, टोकन की पहचान कर लेती है, तो वह अनुरोध किए गए डेटा को भेज देती है.

Fitbit इंटरफ़ेस के लिए AuthSub का इस्तेमाल करना

Fitbit के लिए AuthSub या AuthSubAS, Google डेटा एपीआई का इस्तेमाल करने वाले Flash (या Silverlight) ऐप्लिकेशन के लिए क्रॉस-डोमेन AuthSub एंडपॉइंट उपलब्ध कराता है.

AuthSubAS, google.com पर मिलने वाले AuthSub एंडपॉइंट का डुप्लीकेट वर्शन बनाता है. इसमें एक अतिरिक्त crossdomain.xml फ़ाइल होती है जो Flash (या Silverlight) को उन एंडपॉइंट का ऐक्सेस देती है. उदाहरण के लिए, एंडपॉइंट AuthSubSessionToken का इस्तेमाल https://accounts.googleapis.com/accounts/AuthSubSessionToken को ऐक्सेस करके किया जा सकता है.

नीचे दिए गए चरणों में, पुष्टि करने वाला टोकन पाने और उसे किसी Flash ऐप्लिकेशन से Google सेवा को ऐक्सेस करने के लिए इस्तेमाल किया जाएगा.

  1. क्रॉस-डोमेन नीतियां सेट अप करें.

    क्रॉस-डोमेन तरीके से Flash का उपयोग करने के लिए, इसे ऐसे हर बाहरी डोमेन के लिए नीति से शुरू किया जाना चाहिए जिसे ऐक्सेस करना है. ऐसा करने के लिए, हर डोमेन के लिए ActionScript विधि Security.loadPolicyFile(policy) शुरू करें, जैसे:

    <?xml version="1.0" encoding="utf-8"?>
    <Application xmlns="http://www.adobe.com/2006/mxml"
      initialize="onInitialized()"
      applicationComplete="onLoaded()">
      <Script>
        import flash.external.ExternalInterface;
        import flash.net.navigateToURL;
        import mx.controls.Alert;
    
        private function onInitialized() : void {
          // Load the cross domain policy file for each of the googleapis.com
          // domains used. At the very least, we need the ones for the API (photos,
          // in this case) and the one for AuthSub for ActionScript (accounts).
          Security.loadPolicyFile('http://photos.googleapis.com/data/crossdomain.xml');
          Security.loadPolicyFile('https://accounts.googleapis.com/crossdomain.xml');
        }
    
    

    पूरा सैंपल देखें

    ध्यान दें कि हम accounts.googleapis.com (AuthSubAS) और photos.googleapis.com/data (PicasaWeb, जिन्हें उदाहरण बाद में ऐक्सेस किया जाता है) के लिए नीति लोड कर रहे हैं.

  2. सिर्फ़ एक बार इस्तेमाल होने वाले टोकन का अनुरोध करें.

    AuthSub प्रक्रिया का पहला चरण AuthSub एंडपॉइंट से एक बार इस्तेमाल किए जाने वाले टोकन का अनुरोध करना है. आपके ऐप्लिकेशन को AuthSubRequest एंडपॉइंट पर कॉल करके ऐसा करना चाहिए, जैसे:

          var getTokenPage : URLRequest = new URLRequest('https://www.google.com/accounts/AuthSubRequest');
    
          // Construct the parameters of the AuthSub request. These are the same parameters
          // as normal AuthSub, which can be found here: /accounts/docs/AuthSub.html#AuthSubRequest
          var authSubParams : URLVariables = new URLVariables();
          authSubParams['scope'] = 'http://photos.googleapis.com/data'; // photos API
          authSubParams['session'] = 1; // single-use token
          authSubParams['secure'] = 0; // non-secure apps
          authSubParams['next'] = 'photos.swf'; // The URL of this app.
    
          getTokenPage.data =  authSubParams;
          navigateToURL(getTokenPage, '_top');
    
    

    पूरा सैंपल देखें

    इस तरीके के लिए, स्कोप वैल्यू ज़रूरी है. Google की हर सेवा, ऐक्सेस के दायरे को तय करती है. इसलिए, आपको टोकन के अनुरोध में उस दायरे का रेफ़रंस देना होगा. यह तय करने के लिए कि किस स्कोप वैल्यू का इस्तेमाल करना है, उस Google सेवा के दस्तावेज़ देखें जिसे आपको ऐक्सेस करना है. यह एक यूआरएल की तरह दिखता है; यह एक साधारण यूआरएल हो सकता है जो सेवा की पहचान कर सकता है. इसके अलावा, यह ज़्यादा सीमित ऐक्सेस शामिल कर सकता है, जैसे कि रीड ओनली ऐक्सेस का ऐक्सेस सीमित करना. जब सेवा किसी दायरे को चुनने का विकल्प देती है, तो सबसे सख्त दायरे वाले टोकन का अनुरोध करें. उदाहरण के लिए, Google Calendar के डेटा फ़ीड को ऐक्सेस करने के लिए, 'http://www.google.com/calendar/feeds' न कि 'http://www.google.com/calendar' के दायरे का इस्तेमाल करें.

    अहम जानकारी:

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

  3. पुष्टि करने के टोकन का अनुरोध करें.

    AuthSubRequest एंडपॉइंट, उपयोगकर्ता के ब्राउज़र का यूआरएल http://yourWebAppUrl?token=singleUseToken पर सेट करके, आपके ऐप्लिकेशन को सिंगल-यूज़ टोकन दिखाएगा. जब आपके ऐप्लिकेशन को सिर्फ़ एक बार इस्तेमाल होने वाला टोकन मिल जाता है, तो इसे टोकन को कई बार इस्तेमाल होने वाले (लंबे समय तक चलने वाला) टोकन के साथ बदलना होता है. इसका इस्तेमाल Google डेटा फ़ीड के लिए अनुरोध करने के लिए किया जा सकता है. ऐसा करने के लिए, AuthSubSessionToken इस्तेमाल के सिंगल टोकन का इस्तेमाल करके कॉल करें.

    आपका ऐप्लिकेशन, यूआरएल लोड होने पर उसमें token पैरामीटर की जांच करेगा:

        private function onLoaded() : void {
    
          // Once the application has loaded, check to see if an AuthSub token was
    // placed into the current page's URL. If it was, the user has already
    // authenticated, and we can continue to connect to the the service itself. var searchPortion : String = ExternalInterface.call('window.location.search.toString'); if (searchPortion.length > 0) { // remove the ? from the token and extract the token. searchPortion = searchPortion.substring(1); // NOTE: Real applications should parse the URL properly. if (searchPortion.indexOf('token=') == 0) { getLongLivedToken(searchPortion.substring(6)); return; } // more code ... }

    पूरा सैंपल देखें

    अगर टोकन मिलता है, तो उसे getLongLivedToken जैसे किसी तरीके को कॉल करना चाहिए, जो AuthSubSessionToken एंडपॉइंट को शुरू करता है:

        private function getLongLivedToken(singleUseToken : String) : void {
          // Construct a call to the AuthSub for ActionScript endpoint on accounts.googleapis.com.
          // This call will exchange the single use token given to use by AuthSub for a long-term
          // token that we can use to make requests to endpoints such as Photos.
          var getTokenRequest : URLRequest = new URLRequest('https://accounts.googleapis.com/accounts/AuthSubSessionToken');
    
          // Due to a bug in Flash, a URLRequest with a GET request will
          // not properly send headers. We therefore use POST for this and *ALL*
          // requests.
          getTokenRequest.method = URLRequestMethod.POST;
    
          // Due to a bug in Flash, a URLRequest without a valid parameter will
          // not properly send headers. We therefore add a useless parameter to
          // make this code work.
          getTokenRequest.data = new URLVariables('pleaseignore=ignore');
    
          // Add the AuthSub for ActionScript headers.
          getTokenRequest.requestHeaders.push(new URLRequestHeader('Authorization', 'AuthSub token="' + singleUseToken + '"'));
    
          // Create the loader to get the token itself. The loader will callback
          // to the following event handlers if and when the server responds.
          var getToken : URLLoader = new URLLoader();
          getToken.addEventListener(Event.COMPLETE, onGetTokenResult);
          getToken.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onGetTokenFailed);
          getToken.addEventListener(IOErrorEvent.IO_ERROR, onGetTokenFailed);
    
          try {
            getToken.load(getTokenRequest);
          } catch (e : Error) {
            Alert.show('Some error occurred: ' + e);
          }
    
    

    पूरा सैंपल देखें

    onGetTokenResult हैंडलर जैसे तरीके से, दिखाया गया टोकन सेव करना चाहिए:

        private function onGetTokenResult(e : Event) : void {
          // Load the parameters from the response.
          var getToken : URLLoader = URLLoader(e.target);
          var params : URLVariables = new URLVariables(getToken.data);
    
          // Parse the session token from the result. Real applications
          // might at this point store the token in a long-term cookie so
          // that repeated usages of the application do not require this entire
          // authentication process.
          sessionToken = params.Token;
    
          // Trim the newline from the end of the session token.
          sessionToken = sessionToken.substring(0, sessionToken.length - 1);
       }
    
    

    पूरा सैंपल देखें

    अहम जानकारी:

    • हम सुझाव देते हैं कि आपका ऐप्लिकेशन कुकी में लंबे समय का टोकन स्टोर करे और कम अवधि वाले टोकन की जांच से पहले उनकी जांच करे; ऐसा करने से हर बार उपयोगकर्ता आपके ऐप्लिकेशन का इस्तेमाल करना चाहें, तो उन्हें पुष्टि करने वाले पुष्टि पेज पर जाने से बचना होता है.

  4. पुष्टि करने वाले टोकन का इस्तेमाल करना.

    पुष्टि करने वाले टोकन का इस्तेमाल करने के लिए, इसे Google की सेवा को किए गए किसी भी अनुरोध के साथ Authorization हेडर से अटैच करें:

    Authorization: AuthSub token="(session token goes here)"

    Photos सेवा के लिए Actionscript में उदाहरण:

          // Prepare a request to the photos API for the private album
          // of the user.
          var albumRequest : URLRequest = new URLRequest('http://photos.googleapis.com/data/feed/api/user/default');
          albumRequest.data = new URLVariables('access=private&v=2&err=xml');
    
          // Due to a bug in Flash, a URLRequest with a GET request will
          // not properly send headers. We therefore use POST for this and *ALL*
          // requests.
          albumRequest.method = URLRequestMethod.POST;
    
          var authsubHeader : String = 'AuthSub token="' + sessionToken + '"';
    
          // Add the Authorization header which uses the session token.
          albumRequest.requestHeaders.push(new URLRequestHeader('Authorization', authsubHeader));
    
          // The X-HTTP-Method-Override header tells the Photos API to treat this request
          // as a GET request, even though it is being conducted as a POST (due to the bug
          // mentioned above). This is very important, as GData APIs will react differently
          // to different HTTP request types.
          albumRequest.requestHeaders.push(new URLRequestHeader('X-HTTP-Method-Override', 'GET'));
    
          // We expect ATOM XML to be returned.
          albumRequest.requestHeaders.push(new URLRequestHeader('Content-Type', 'application/atom+xml'));
    
    

    पूरा सैंपल देखें

  5. Google, मैन्युअल तरीके से लॉग आउट करने की सुविधा देता है, जैसे कि लॉग आउट बटन या क्लिक किया जा सकने वाला लिंक. इस तरीके की मदद से, उपयोगकर्ता जब चाहें, लॉग आउट कर सकते हैं या लॉग इन रह सकते हैं. साथ ही, अगली बार आपके ऐप्लिकेशन का इस्तेमाल करते समय, डेटा फ़ीड को आसानी से ऐक्सेस कर सकते हैं.

टोकन के बारे में जानकारी

यह सेक्शन उन टोकन के बारे में बताता है जिनका इस्तेमाल TrueSub के लिए AuthSub ने किया है. ज़्यादातर मामलों में, आपको इस जानकारी के बारे में जानने की ज़रूरत नहीं होगी.

हर ऑथेंटिकेशन टोकन, नीचे दिए गए डेटा के हिसाब से होता है:

  • Google सेवा का दायरा
  • उपयोगकर्ता का Google खाता
  • क्लाइंट ऐप्लिकेशन

टोकन के डेटा से यह पक्का होता है कि तीसरे पक्ष का सिर्फ़ वही ऐप्लिकेशन डेटा का अनुरोध कर सकता है जिसे बताया गया है. साथ ही, अनुरोध में बताए गए दायरे और उपयोगकर्ता खाते से डेटा शामिल किया जाता है.

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

जब तक कि निरस्त करने के लिए कोई टोकन निरस्त नहीं हो जाता, तब तक उसका AuthSub के ज़रिए वापस लौटे टोकन का कई बार इस्तेमाल किया जा सकता है. टोकन की लाइफ़ को मैनेज करना, आपकी सुरक्षा पर निर्भर है. साथ ही, इसे मैनेज करना आपके ऐप्लिकेशन पर निर्भर करता है. Google हर बार नया सत्र शुरू किए जाने पर नए टोकन का अनुरोध करने का सुझाव देता है.

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

वापस सबसे ऊपर जाएं