खास जानकारी
हमने 16 फ़रवरी, 2022 को बताया था कि हम Google OAuth इंटरैक्शन को ज़्यादा सुरक्षित बनाने के लिए, OAuth के ज़्यादा सुरक्षित फ़्लो का इस्तेमाल करेंगे. इस गाइड से, आपको ज़रूरी बदलावों को समझने और लूपबैक आईपी पते के फ़्लो से, काम करने वाले विकल्पों पर माइग्रेट करने में मदद मिलती है.
यह एक सुरक्षात्मक उपाय है. इससे Google के OAuth 2.0 ऑथराइज़ेशन एंडपॉइंट के साथ इंटरैक्ट करते समय, फ़िशिंग और ऐप्लिकेशन के नाम पर धोखाधड़ी करने वाले हमलों से सुरक्षा मिलती है.
लूपबैक आईपी पते का फ़्लो क्या है?
लूपबैक आईपी पते के फ़्लो में, लूपबैक आईपी पते याlocalhost
का इस्तेमाल किया जा सकता है. यह रीडायरेक्ट यूआरआई का होस्ट कॉम्पोनेंट होता है. यहां उपयोगकर्ता के OAuth सहमति के अनुरोध को स्वीकार करने के बाद, क्रेडेंशियल भेजे जाते हैं. यह फ़्लो, मैन इन द मिडल हमलों के लिए असुरक्षित है. इन हमलों में, कुछ ऑपरेटिंग सिस्टम पर एक ही लूपबैक इंटरफ़ेस को ऐक्सेस करने वाला कोई नुकसान पहुंचाने वाला ऐप्लिकेशन, दिए गए रीडायरेक्ट यूआरआई के लिए अनुमति देने वाले सर्वर से मिले जवाब को इंटरसेप्ट कर सकता है. साथ ही, अनुमति देने वाले कोड को ऐक्सेस कर सकता है.
लूपबैक आईपी पते के फ़्लो को iOS, Android, और Chrome के OAuth क्लाइंट टाइप के लिए बंद किया जा रहा है. हालांकि, यह डेस्कटॉप ऐप्लिकेशन पर काम करता रहेगा.
अनुपालन से जुड़ी अहम तारीखें
- 14 मार्च, 2022 - नए OAuth क्लाइंट को लूपबैक आईपी पते के फ़्लो का इस्तेमाल करने से रोका गया
- 1 अगस्त, 2022 - नीति का पालन न करने वाले OAuth अनुरोधों के लिए, उपयोगकर्ता को चेतावनी वाला मैसेज दिख सकता है
- 31 अगस्त, 2022 - लूपबैक आईपी पते का फ़्लो, 14 मार्च, 2022 से पहले बनाए गए नेटिव Android, Chrome ऐप्लिकेशन, और iOS OAuth क्लाइंट के लिए ब्लॉक कर दिया गया है
- 21 अक्टूबर, 2022 - सभी मौजूदा क्लाइंट को ब्लॉक कर दिया गया है (इसमें छूट वाले क्लाइंट भी शामिल हैं)
ज़रूरी शर्तों का पालन न करने वाले अनुरोधों के लिए, उपयोगकर्ता को गड़बड़ी का मैसेज दिखेगा. मैसेज में उपयोगकर्ताओं को बताया जाएगा कि ऐप्लिकेशन को ब्लॉक कर दिया गया है. साथ ही, इसमें वह सहायता ईमेल पता दिखेगा जिसे आपने Google API Console में OAuth के लिए सहमति वाली स्क्रीन में रजिस्टर किया है.
- पता करें कि क्या आप पर इसका असर पड़ा है.
- अगर आपको समस्या आ रही है, तो अपलोड करने के लिए कोई ऐसा तरीका आज़माएं जो काम करता हो.
यह पता लगाना कि क्या आप पर इसका असर पड़ा है
अपने OAuth क्लाइंट आईडी के टाइप की समीक्षा करना
Google Cloud Console के Clients page पर जाएं. इसके बाद, OAuth 2.0 क्लाइंट आईडी सेक्शन में जाकर, अपना OAuth क्लाइंट आईडी टाइप देखें. यह इनमें से कोई एक होगा: वेब ऐप्लिकेशन, Android, iOS, यूनिवर्सल विंडोज़ प्लैटफ़ॉर्म (यूडब्ल्यूपी), Chrome ऐप्लिकेशन, टीवी और सीमित इनपुट डिवाइस, डेस्कटॉप ऐप्लिकेशन.
अगर आपका क्लाइंट टाइप Android, Chrome ऐप्लिकेशन या iOS है और लूपबैक आईपी पते का इस्तेमाल किया जा रहा है, तो अगले चरण पर जाएं.
अगर डेस्कटॉप ऐप्लिकेशन के OAuth क्लाइंट पर लूपबैक आईपी पते का इस्तेमाल किया जा रहा है, तो आपको इस सुविधा के बंद होने के बारे में कुछ भी करने की ज़रूरत नहीं है. ऐसा इसलिए, क्योंकि उस OAuth क्लाइंट टाइप के साथ इसका इस्तेमाल जारी रहेगा.
यह पता लगाने का तरीका कि आपका ऐप्लिकेशन, लूपबैक आईपी पते के फ़्लो का इस्तेमाल कर रहा है या नहीं
अपने ऐप्लिकेशन के कोड की जांच करें या आउटगोइंग नेटवर्क कॉल की जांच करें. अगर आपका ऐप्लिकेशन OAuth लाइब्रेरी का इस्तेमाल कर रहा है, तो यह पता लगाएं कि Google OAuth अनुमति के अनुरोध में, लूपबैक रीडायरेक्ट यूआरआई वैल्यू का इस्तेमाल किया जा रहा है या नहीं.
अपने ऐप्लिकेशन कोड की जांच करना
redirect_uri
पैरामीटर में इनमें से कोई वैल्यू है या नहीं:
-
redirect_uri=http://127.0.0.1:<port>
उदाहरण के लिएredirect_uri=http://127.0.0.1:3000
-
redirect_uri=http://[::1]:<port>
उदाहरण के लिएredirect_uri=http://[::1]:3000
-
redirect_uri=http://localhost:<port>
उदाहरण के लिएredirect_uri=http://localhost:3000
https://accounts.google.com/o/oauth2/v2/auth? redirect_uri=http://localhost:3000& response_type=code& scope=<SCOPES>& state=<STATE>& client_id=<CLIENT_ID>
आउटगोइंग नेटवर्क कॉल की जांच करना
- वेब ऐप्लिकेशन - Chrome पर नेटवर्क गतिविधि की जांच करना
- Android - Network Inspector की मदद से नेटवर्क ट्रैफ़िक की जांच करना
-
Chrome ऐप्लिकेशन
- Chrome एक्सटेंशन पेज पर जाएं
- एक्सटेंशन पेज पर सबसे ऊपर दाईं ओर मौजूद, डेवलपर मोड चेकबॉक्स पर सही का निशान लगाएं
- वह एक्सटेंशन चुनें जिस पर आपको नज़र रखनी है
- एक्सटेंशन पेज के व्यू की जांच करें सेक्शन में जाकर, बैकग्राउंड पेज लिंक पर क्लिक करें
- डेवलपर टूल पॉप-अप खुलेगा. इसमें, नेटवर्क टैब में जाकर, नेटवर्क ट्रैफ़िक की निगरानी की जा सकती है
- iOS - Instruments की मदद से एचटीटीपी ट्रैफ़िक का विश्लेषण करना
- Universal Windows Platform (UWP) - Visual Studio में नेटवर्क ट्रैफ़िक की जांच करना
- डेस्कटॉप ऐप्लिकेशन - नेटवर्क कैप्चर टूल का इस्तेमाल करें यह उस ऑपरेटिंग सिस्टम के लिए उपलब्ध होना चाहिए जिसके लिए ऐप्लिकेशन बनाया गया है
redirect_uri
पैरामीटर में इनमें से कोई वैल्यू है या नहीं:
-
redirect_uri=http://127.0.0.1:<port>
उदाहरण के लिएredirect_uri=http://127.0.0.1:3000
-
redirect_uri=http://[::1]:<port>
उदाहरण के लिएredirect_uri=http://[::1]:3000
-
redirect_uri=http://localhost:<port>
उदाहरण के लिएredirect_uri=http://localhost:3000
https://accounts.google.com/o/oauth2/v2/auth? redirect_uri=http://localhost:3000& response_type=code& scope=<SCOPES>& state=<STATE>& client_id=<CLIENT_ID>
अपलोड करने के लिए, एफ़टीपी के बजाय कोई ऐसा तरीका आज़माएं जो काम करता हो
मोबाइल क्लाइंट (Android / iOS)
अगर आपको लगता है कि आपका ऐप्लिकेशन, Android या iOS OAuth क्लाइंट टाइप के साथ लूपबैक आईपी पते के फ़्लो का इस्तेमाल कर रहा है, तो आपको सुझाए गए SDK टूल (Android, iOS) का इस्तेमाल करना चाहिए.
SDK की मदद से, Google APIs को आसानी से ऐक्सेस किया जा सकता है. साथ ही, यह Google के OAuth 2.0 ऑथराइज़ेशन एंडपॉइंट पर किए जाने वाले सभी कॉल को मैनेज करता है.
यहां दिए गए दस्तावेज़ के लिंक में, सुझाए गए SDK का इस्तेमाल करके Google API को ऐक्सेस करने का तरीका बताया गया है. इसके लिए, लूपबैक आईपी पते वाले रीडायरेक्ट यूआरआई का इस्तेमाल नहीं करना पड़ता.
Android पर Google API ऐक्सेस करना
क्लाइंट-साइड ऐक्सेस
यहां दिए गए उदाहरण में, Google Identity Services की सुझाई गई Android लाइब्रेरी का इस्तेमाल करके, Android पर क्लाइंट साइड से Google API ऐक्सेस करने का तरीका बताया गया है.
ListrequestedScopes = Arrays.asList(DriveScopes.DRIVE_APPDATA); AuthorizationRequest authorizationRequest = AuthorizationRequest.builder().setRequestedScopes(requestedScopes).build(); Identity.getAuthorizationClient(activity) .authorize(authorizationRequest) .addOnSuccessListener( authorizationResult -> { if (authorizationResult.hasResolution()) { // Access needs to be granted by the user PendingIntent pendingIntent = authorizationResult.getPendingIntent(); try { startIntentSenderForResult(pendingIntent.getIntentSender(), REQUEST_AUTHORIZE, null, 0, 0, 0, null); } catch (IntentSender.SendIntentException e) { Log.e(TAG, "Couldn't start Authorization UI: " + e.getLocalizedMessage()); } } else { // Access already granted, continue with user action saveToDriveAppFolder(authorizationResult); } }) .addOnFailureListener(e -> Log.e(TAG, "Failed to authorize", e));
कॉन्टेंट को उपयोगकर्ता के Drive फ़ोल्डर में सेव करने के लिए, authorizationResult
को अपने तय किए गए तरीके से पास करें. authorizationResult
में
getAccessToken()
तरीका होता है, जो ऐक्सेस टोकन दिखाता है.
सर्वर-साइड (ऑफ़लाइन) ऐक्सेस
यहां दिए गए उदाहरण में, Android पर सर्वर साइड से Google API को ऐक्सेस करने का तरीका बताया गया है.ListrequestedScopes = Arrays.asList(DriveScopes.DRIVE_APPDATA); AuthorizationRequest authorizationRequest = AuthorizationRequest.builder() .requestOfflineAccess(webClientId) .setRequestedScopes(requestedScopes) .build(); Identity.getAuthorizationClient(activity) .authorize(authorizationRequest) .addOnSuccessListener( authorizationResult -> { if (authorizationResult.hasResolution()) { // Access needs to be granted by the user PendingIntent pendingIntent = authorizationResult.getPendingIntent(); try { startIntentSenderForResult(pendingIntent.getIntentSender(), REQUEST_AUTHORIZE, null, 0, 0, 0, null); } catch (IntentSender.SendIntentException e) { Log.e(TAG, "Couldn't start Authorization UI: " + e.getLocalizedMessage()); } } else { String authCode = authorizationResult.getServerAuthCode(); } }) .addOnFailureListener(e -> Log.e(TAG, "Failed to authorize", e));
authorizationResult
में
getServerAuthCode()
तरीका होता है. यह ऑथराइज़ेशन कोड दिखाता है. इस कोड को अपने बैकएंड पर भेजा जा सकता है, ताकि ऐक्सेस और रीफ़्रेश टोकन मिल सके.
किसी iOS ऐप्लिकेशन में Google API ऐक्सेस करना
क्लाइंट-साइड ऐक्सेस
यहां दिए गए उदाहरण में बताया गया है कि iOS पर क्लाइंट साइड से Google API को कैसे ऐक्सेस करें.
user.authentication.do { authentication, error in guard error == nil else { return } guard let authentication = authentication else { return } // Get the access token to attach it to a REST or gRPC request. let accessToken = authentication.accessToken // Or, get an object that conforms to GTMFetcherAuthorizationProtocol for // use with GTMAppAuth and the Google APIs client library. let authorizer = authentication.fetcherAuthorizer() }
एपीआई को कॉल करने के लिए, ऐक्सेस टोकन का इस्तेमाल करें. इसके लिए, REST या gRPC अनुरोध के हेडर में ऐक्सेस टोकन शामिल करें (Authorization: Bearer ACCESS_TOKEN
) या
REST के लिए, Objective-C के लिए Google APIs क्लाइंट लाइब्रेरी के साथ फ़ेचर ऑथराइज़र (GTMFetcherAuthorizationProtocol
) का इस्तेमाल करें.
क्लाइंट-साइड पर Google API को ऐक्सेस करने के तरीके के बारे में जानने के लिए, क्लाइंट-साइड ऐक्सेस गाइड पढ़ें. में क्लाइंट-साइड पर Google API को ऐक्सेस करने का तरीका बताया गया है.
सर्वर-साइड (ऑफ़लाइन) ऐक्सेस
यहां दिए गए उदाहरण में, iOS क्लाइंट के लिए सर्वर साइड पर Google API को ऐक्सेस करने का तरीका बताया गया है.GIDSignIn.sharedInstance.signIn(with: signInConfig, presenting: self) { user, error in guard error == nil else { return } guard let user = user else { return } // request a one-time authorization code that your server exchanges for // an access token and refresh token let authCode = user.serverAuthCode }
सर्वर साइड से Google API को ऐक्सेस करने का तरीका जानने के लिए, सर्वर-साइड ऐक्सेस गाइड पढ़ें.
Chrome ऐप्लिकेशन क्लाइंट
अगर आपको पता चलता है कि आपका ऐप्लिकेशन, Chrome ऐप्लिकेशन क्लाइंट पर लूपबैक आईपी पते का फ़्लो इस्तेमाल कर रहा है, तो आपको Chrome Identity API का इस्तेमाल करना शुरू कर देना चाहिए.
यहां दिए गए उदाहरण में, लूपबैक आईपी पते वाले रीडायरेक्ट यूआरआई का इस्तेमाल किए बिना, उपयोगकर्ता के सभी संपर्कों को पाने का तरीका बताया गया है.
window.onload = function() { document.querySelector('button').addEventListener('click', function() { // retrieve access token chrome.identity.getAuthToken({interactive: true}, function(token) { // .......... // the example below shows how to use a retrieved access token with an appropriate scope // to call the Google People API contactGroups.get endpoint fetch( 'https://people.googleapis.com/v1/contactGroups/all?maxMembers=20&key=API_KEY', init) .then((response) => response.json()) .then(function(data) { console.log(data) }); }); }); };
उपयोगकर्ताओं की पुष्टि करने और Chrome Identity API की मदद से Google एंडपॉइंट को कॉल करने के तरीके के बारे में ज़्यादा जानने के लिए, Chrome Identity API गाइड देखें.