लूपबैक आईपी पता फ़्लो माइग्रेशन गाइड

खास जानकारी

हमने 16 फ़रवरी, 2022 को, ज़्यादा सुरक्षित OAuth फ़्लो का इस्तेमाल करके, Google 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 Cloud Console में OAuth सहमति स्क्रीन पर रजिस्टर किया गया सहायता ईमेल पता भी दिखेगा.

माइग्रेशन की प्रोसेस पूरी करने के लिए, आपको ये दो मुख्य चरण पूरे करने होंगे:
  1. यह पता लगाएं कि आपके ऐप्लिकेशन पर इसका असर पड़ेगा या नहीं.
  2. अगर आपके ऐप्लिकेशन पर इसका असर पड़ेगा, तो काम करने वाले किसी विकल्प पर माइग्रेट करें.

यह पता लगाएं कि आपके ऐप्लिकेशन पर इसका असर पड़ेगा या नहीं

अपने OAuth क्लाइंट आईडी के टाइप की समीक्षा करें

Google Cloud Console के क्लाइंट पेज पर जाएं और OAuth 2.0 क्लाइंट आईडी सेक्शन में, अपने OAuth क्लाइंट आईडी का टाइप देखें. यह इनमें से कोई एक होगा: वेब ऐप्लिकेशन, Android, iOS, यूनिवर्सल Windows प्लैटफ़ॉर्म (UWP), Chrome ऐप्लिकेशन, टीवी और सीमित इनपुट वाले डिवाइस, डेस्कटॉप ऐप्लिकेशन.

अगर आपके क्लाइंट का टाइप Android, Chrome ऐप्लिकेशन या iOS है और आप लूपबैक आईपी पते के फ़्लो का इस्तेमाल कर रहे हैं, तो अगले चरण पर जाएं.

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

यह पता लगाने का तरीका कि आपका ऐप्लिकेशन, लूपबैक आईपी पते के फ़्लो का इस्तेमाल कर रहा है या नहीं

यह पता लगाने के लिए कि आपका ऐप्लिकेशन, Google 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>

आउटगोइंग नेटवर्क कॉल की जांच करना

नेटवर्क कॉल की जांच करने का तरीका, आपके ऐप्लिकेशन के क्लाइंट टाइप के हिसाब से अलग-अलग होगा.
नेटवर्क कॉल की जांच करते समय, 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>

काम करने वाले किसी विकल्प पर माइग्रेट करना

मोबाइल क्लाइंट (Android / iOS)

अगर आपको पता चलता है कि आपका ऐप्लिकेशन, Android या iOS OAuth क्लाइंट टाइप के साथ लूपबैक आईपी पते के फ़्लो का इस्तेमाल कर रहा है, तो आपको सुझाए गए SDK टूल (Android, iOS) का इस्तेमाल करना चाहिए.

SDK टूल की मदद से, Google APIs को आसानी से ऐक्सेस किया जा सकता है. साथ ही, यह Google के OAuth 2.0 ऑथराइज़ेशन एंडपॉइंट के सभी कॉल को मैनेज करता है.

नीचे दिए गए दस्तावेज़ों के लिंक में, सुझाए गए SDK टूल का इस्तेमाल करके, लूपबैक आईपी पते के रीडायरेक्ट यूआरआई का इस्तेमाल किए बिना, Google APIs को ऐक्सेस करने के तरीके के बारे में जानकारी दी गई है.

Android पर Google APIs को ऐक्सेस करना

क्लाइंट-साइड ऐक्सेस

यहां दिए गए उदाहरण में बताया गया है कि सुझाए गए Google Identity Services Android Library का इस्तेमाल करके, Android पर क्लाइंट साइड से Google APIs को कैसे ऐक्सेस किया जा सकता है.

  List requestedScopes = 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 APIs को कैसे ऐक्सेस किया जा सकता है.
  List requestedScopes = 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 APIs को ऐक्सेस करना

क्लाइंट-साइड ऐक्सेस

यहां दिए गए उदाहरण में बताया गया है कि iOS पर क्लाइंट साइड से Google APIs को कैसे ऐक्सेस किया जा सकता है.

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()
}

API को कॉल करने के लिए, ऐक्सेस टोकन का इस्तेमाल करें. इसके लिए, REST या gRPC अनुरोध के हेडर में ऐक्सेस टोकन शामिल करें (Authorization: Bearer ACCESS_TOKEN). इसके अलावा, REST के लिए Objective-C के लिए Google APIs क्लाइंट लाइब्रेरी के साथ, फ़ेचर ऑथराइज़र (GTMFetcherAuthorizationProtocol) का इस्तेमाल करें.

क्लाइंट साइड से Google APIs को ऐक्सेस करने के तरीके के बारे में जानने के लिए, क्लाइंट-साइड ऐक्सेस की गाइड पढ़ें. क्लाइंट साइड से Google APIs को ऐक्सेस करने के तरीके के बारे में जानने के लिए, क्लाइंट-साइड ऐक्सेस की गाइड पढ़ें.

सर्वर-साइड (ऑफ़लाइन) ऐक्सेस
यहां दिए गए उदाहरण में बताया गया है कि iOS क्लाइंट के लिए, सर्वर साइड से Google APIs को कैसे ऐक्सेस किया जा सकता है.
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 APIs को ऐक्सेस करने के तरीके के बारे में जानने के लिए, सर्वर-साइड ऐक्सेस गाइड पढ़ें.

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 की गाइड पढ़ें.