इस दस्तावेज़ में, Flash या Silverlight ऐप्लिकेशन से Google के AuthSub पुष्टि करने वाले सिस्टम का इस्तेमाल करने का तरीका बताया गया है.
ध्यान दें: अगर आपको AuthSub के बारे में पहले से पता है, तो आपको यह पता होगा कि यह वेब पर काम करने वाले ऐप्लिकेशन के लिए, Google की खाता पुष्टि करने वाली सेवा है. आपको यह भी पता होगा कि ActionScript के लिए AuthSub का कॉन्सेप्ट काफ़ी हद तक मिलता-जुलता है. इनके लागू होने का तरीका अलग-अलग होता है. हालांकि, क्लाइंट ऐप्लिकेशन डेवलपर के तौर पर आपके लिए, इन अंतरों के बारे में जानना ज़रूरी नहीं है. कुछ दस्तावेज़ों में, जहां अंतर मायने नहीं रखता वहां हम ActionScript के लिए AuthSub को "AuthSub" के तौर पर छोटा करके लिखते हैं.
AuthSub for ActionScript इंटरफ़ेस की मदद से, Flash या Silverlight ऐप्लिकेशन, किसी उपयोगकर्ता की ओर से सुरक्षित Google Data API फ़ीड की पुष्टि कर सकते हैं. सुरक्षा का बेहतर स्तर बनाए रखने के लिए, इंटरफ़ेस ऐप्लिकेशन को पुष्टि करने वाला टोकन पाने की सुविधा देता है. हालांकि, यह उपयोगकर्ता के खाते में लॉगिन करने की जानकारी को कभी भी मैनेज नहीं करता.
ActionScript के लिए AuthSub, JavaScript के लिए AuthSub का एक वैरिएंट है. JavaScript के लिए AuthSub की तरह, यह क्लाइंट ऐप्लिकेशन के लिए क्रॉस-डोमेन तरीका उपलब्ध कराता है. इससे, Google के अलावा किसी अन्य डोमेन पर होस्ट किए गए वेब पेज से पुष्टि की जा सकती है. यह स्टैंडर्ड AuthSub से इस मामले में अलग है कि पुष्टि करने वाली सेवा किसी दूसरे डोमेन (www.google.com के बजाय accounts.googleapis.com) पर मौजूद होती है. साथ ही, यह एक crossdomain.xml फ़ाइल उपलब्ध कराती है, जिससे बाहरी साइटों से उस डोमेन को ऐक्सेस किया जा सकता है.
सभी पुष्टि करने वाली सेवा के एपीआई इस्तेमाल करने के बारे में चर्चा करने के लिए, Google Accounts API Group भी देखें.
ऑडियंस
यह दस्तावेज़, उन प्रोग्रामर के लिए है जो Google की सेवाओं को ऐक्सेस करने वाले Flash या Silverlight वेब ऐप्लिकेशन डेवलप कर रहे हैं.
इस दस्तावेज़ में यह माना गया है कि आपको Google Data APIs प्रोटोकॉल और AuthSub इंटरफ़ेस के बारे में सामान्य जानकारी है. इसमें यह भी माना गया है कि आपको ActionScript में प्रोग्रामिंग करने का तरीका पता है.
इन प्लैटफ़ॉर्म पर काम करता है
फ़िलहाल, ActionScript के लिए AuthSub की सुविधा, Firefox 1.5 और इसके बाद के वर्शन और Internet Explorer 6.0 और इसके बाद के वर्शन पर काम करती है. इसके लिए, Flash 9.0 या इसके बाद का वर्शन या Silverlight 2.0 या इसके बाद का वर्शन होना ज़रूरी है.
ActionScript के लिए AuthSub कैसे काम करता है
यहां वेब ऐप्लिकेशन, Google की पुष्टि करने वाली सेवा, और Google की डेटा सेवा के बीच कम्यूनिकेशन के बारे में खास जानकारी दी गई है:
- किसी उपयोगकर्ता की ओर से Google Data सेवा को ऐक्सेस करने के लिए, वेब ऐप्लिकेशन के पास पुष्टि करने वाला मान्य टोकन होना चाहिए. आम तौर पर, ऐप्लिकेशन इस टोकन को कुकी में सेव करते हैं. अगर ऐसी कोई कुकी मौजूद नहीं है, तो वेब ऐप्लिकेशन को AuthSub के ज़रिए टोकन हासिल करना होगा. टोकन पाने के लिए, वेब ऐप्लिकेशन, ऑथेंटिकेशन सेवा को ActionScript के लिए AuthSub लॉग इन कॉल करता है. इसमें उस सेवा के बारे में जानकारी दी जाती है जिसे ऐक्सेस करना है.
- वेब ऐप्लिकेशन से अनुरोध मिलने पर, पुष्टि करने वाली सेवा उपयोगकर्ता को "ऐक्सेस का अनुरोध" पेज पर रीडायरेक्ट करती है. इस पेज पर, उपयोगकर्ता को अपने Google खाते में लॉग इन करने के लिए कहा जाता है. साथ ही, उनसे Google की सेवा को ऐक्सेस करने की अनुमति देने या न देने के लिए कहा जाता है.
- उपयोगकर्ता यह तय करता है कि वेब ऐप्लिकेशन को ऐक्सेस करने की अनुमति देनी है या नहीं. अगर उपयोगकर्ता ऐक्सेस देने से मना करता है, तो उसे वेब ऐप्लिकेशन पर वापस भेजने के बजाय, Google के किसी पेज पर भेज दिया जाता है.
- अगर उपयोगकर्ता लॉग इन कर लेता है और ऐक्सेस दे देता है, तो पुष्टि करने वाली सेवा, उपयोगकर्ता को उस वेब ऐप्लिकेशन के यूआरएल पर वापस रीडायरेक्ट कर देती है जिसने ओरिजनल कॉल किया था. रीडायरेक्ट, क्वेरी पैरामीटर के ज़रिए तय की गई सेवा के लिए पुष्टि करने वाला टोकन डिलीवर करता है. ऐप्लिकेशन को टोकन को उपयोगकर्ता के ब्राउज़र में, वेब ऐप्लिकेशन के डोमेन के तहत कुकी के तौर पर सेव करना चाहिए. टोकन तब तक मान्य रहता है, जब तक इसे रद्द नहीं किया जाता. (टोकन कब वापस लेने चाहिए, इस बारे में सलाह पाने के लिए टोकन के बारे में जानकारी सेक्शन देखें.)
- वेब ऐप्लिकेशन, Google की डेटा सेवा से संपर्क करता है. साथ ही, सेवा को भेजे गए हर अनुरोध के साथ ऑथेंटिकेशन टोकन भेजता है.
- अगर Google की डेटा सेवा टोकन को पहचान लेती है, तो वह अनुरोध किया गया डेटा उपलब्ध कराती है.
ActionScript इंटरफ़ेस के लिए AuthSub का इस्तेमाल करना
ActionScript के लिए AuthSub या AuthSubAS, Google Data API का इस्तेमाल करने वाले Flash या Silverlight ऐप्लिकेशन के लिए, क्रॉस-डोमेन AuthSub एंडपॉइंट उपलब्ध कराता है.
AuthSubAS, google.com पर मौजूद AuthSub एंडपॉइंट का मिरर उपलब्ध कराता है. इसमें एक अतिरिक्त crossdomain.xml फ़ाइल होती है, जिसकी मदद से Flash (या Silverlight) उन एंडपॉइंट को ऐक्सेस कर सकता है. उदाहरण के लिए, AuthSubSessionToken एंडपॉइंट का इस्तेमाल, https://accounts.googleapis.com/accounts/AuthSubSessionToken को ऐक्सेस करके किया जा सकता है.
नीचे दिए गए तरीके से, पुष्टि करने वाला टोकन पाने और उसका इस्तेमाल करके, Flash ऐप्लिकेशन से Google की किसी सेवा को ऐक्सेस करने की प्रोसेस के बारे में जानकारी मिलेगी.
- क्रॉस-डोमेन नीतियां सेट अप करें.
अगर 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) के लिए नीति लोड कर रहे हैं. उदाहरण में बाद में PicasaWeb को ऐक्सेस किया जाता है. - एक बार इस्तेमाल होने वाले टोकन का अनुरोध करें.
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 सेवाओं को ऐक्सेस करना होता है उन्हें हर नई सेवा के लिए नए टोकन का अनुरोध करना होगा. ऐसा इसलिए, क्योंकि हर सेवा का दायरा अलग-अलग होता है.
- पुष्टि करने वाले टोकन का अनुरोध करें.
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); }
सलाह:
- हमारा सुझाव है कि आपका ऐप्लिकेशन, लंबे समय तक इस्तेमाल होने वाले टोकन को कुकी में सेव करे. साथ ही, कम समय तक इस्तेमाल होने वाले टोकन की जांच करने से पहले, इनकी जांच करे. इससे उपयोगकर्ताओं को हर बार आपके ऐप्लिकेशन का इस्तेमाल करने के लिए, AuthSub की पुष्टि करने वाले पेज पर नहीं जाना पड़ेगा.
- पुष्टि करने वाले टोकन का इस्तेमाल करना.
पुष्टि करने वाले टोकन का इस्तेमाल करने के लिए, इसे 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'));
Google का सुझाव है कि आपको मैन्युअल तरीके से लॉग आउट करने की सुविधा देनी चाहिए. जैसे, लॉग आउट बटन या क्लिक किया जा सकने वाला लिंक. इस तरीके से, उपयोगकर्ताओं को अपनी पसंद के हिसाब से लॉग आउट करने का विकल्प मिलता है. इसके अलावा, वे लॉग इन रह सकते हैं और अपने डेटा फ़ीड को आसानी से उपलब्ध करा सकते हैं, ताकि अगली बार जब वे आपके ऐप्लिकेशन को ऐक्सेस करें, तो उन्हें कोई परेशानी न हो.
टोकन के बारे में जानकारी
इस सेक्शन में, ActionScript के लिए AuthSub इस्तेमाल किए जाने वाले टोकन के बारे में बताया गया है. ज़्यादातर मामलों में, आपको इस जानकारी की ज़रूरत नहीं होगी.
हर पुष्टि करने वाला टोकन, इस डेटा के लिए खास होता है:
- Google की सेवा का दायरा
- उपयोगकर्ता का Google खाता
- क्लाइंट ऐप्लिकेशन
टोकन डेटा से यह पक्का होता है कि सिर्फ़ तीसरे पक्ष का तय किया गया ऐप्लिकेशन ही डेटा का अनुरोध कर सकता है. साथ ही, यह भी पक्का होता है कि अनुरोध, तय किए गए स्कोप और उपयोगकर्ता खाते के डेटा तक ही सीमित हो.
स्कोप, उपयोगकर्ता, और क्लाइंट के इस कॉम्बिनेशन के लिए, एक समय में सिर्फ़ एक टोकन मान्य हो सकता है. जब किसी वेब ऐप्लिकेशन को किसी उपयोगकर्ता के लिए, Google की किसी नई सेवा को ऐक्सेस करना होता है, तो उसे हर बार नए टोकन का अनुरोध करना होता है. टोकन से मिलने वाले ऐक्सेस का दायरा, Google की सेवा पर निर्भर करता है. यह सेवा, कुछ तरह के डेटा या गतिविधि के लिए ऐक्सेस को सीमित कर सकती है. जैसे, सिर्फ़ पढ़ने का ऐक्सेस.
AuthSub, ActionScript इंटरफ़ेस के लिए जो टोकन देता है उसका इस्तेमाल तब तक किया जा सकता है, जब तक उसे रद्द नहीं किया जाता. टोकन की लाइफ़टाइम को मैनेज करने की ज़िम्मेदारी आपके ऐप्लिकेशन की होती है. इसमें सुरक्षा और सुविधा के बीच संतुलन बनाए रखना होता है. Google का सुझाव है कि हर बार नया सेशन शुरू होने पर, नए टोकन का अनुरोध करें.
Google की कुछ सेवाएं, सिर्फ़ उन वेब ऐप्लिकेशन को ऐक्सेस करने की अनुमति दे सकती हैं जो रजिस्टर किए गए हैं और सुरक्षित टोकन का इस्तेमाल कर रहे हैं. ऐसी सेवाओं के लिए, ActionScript के लिए AuthSub का इस्तेमाल नहीं किया जा सकता. सुरक्षित टोकन का इस्तेमाल करने के लिए, आपकी संस्था को Google के साथ एसएसएल सर्टिफ़िकेट रजिस्टर करना होगा. साथ ही, उन डेटा फ़ीड के लिए सभी अनुरोधों पर हस्ताक्षर करने होंगे.