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

खास जानकारी

हमने 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 API Console में OAuth की सहमति वाली स्क्रीन पर रजिस्टर किया गया सहायता ईमेल पता भी दिखाया जाएगा.

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

यह पता लगाना कि क्या आप पर इसका असर पड़ा है

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

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

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

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

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

अपने ऐप्लिकेशन कोड या आउटगोइंग नेटवर्क कॉल (अगर आपका ऐप्लिकेशन किसी OAuth लाइब्रेरी का इस्तेमाल कर रहा है) की जांच करके पता लगाएं कि आपका ऐप्लिकेशन, Google 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 के एपीआई को आसानी से ऐक्सेस किया जा सकता है. साथ ही, यह Google के OAuth 2.0 अनुमति एंडपॉइंट पर किए जाने वाले सभी कॉल को मैनेज करता है.

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

Android पर Google API ऐक्सेस करना

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

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

  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 API को ऐक्सेस करने का तरीका बताया गया है.
  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 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 API क्लाइंट लाइब्रेरी के साथ फ़ेच करने वाले को अनुमति देने वाले टूल (GTMFetcherAuthorizationProtocol) का इस्तेमाल करें.

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