आउट-ऑफ़-बैंड (OOB) फ़्लो माइग्रेशन गाइड

खास जानकारी

हमने 16 फ़रवरी, 2022 को एलान किया था कि हम ज़्यादा सुरक्षित OAuth फ़्लो का इस्तेमाल करके, Google OAuth इंटरैक्शन को ज़्यादा सुरक्षित बनाने जा रहे हैं. इस गाइड से, आपको ज़रूरी बदलावों को समझने और OAuth के आउट-ऑफ़-बैंड (OOB) फ़्लो से, काम करने वाले अन्य विकल्पों पर माइग्रेट करने में मदद मिलती है.

यह कोशिश, फ़िशिंग और किसी दूसरे ऐप्लिकेशन पर होने वाले हमलों से बचाने के लिए एक उपाय है. हालांकि, ऐसा Google के OAuth 2.0 के ऑथराइज़ेशन एंडपॉइंट के साथ इंटरैक्शन के दौरान किया जाता है.

OOB क्या है?

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

ओओबी फ़्लो को सभी क्लाइंट टाइप के लिए बंद कर दिया गया है. जैसे, वेब ऐप्लिकेशन, Android, iOS, Universal Windows Platform (UWP), Chrome ऐप्लिकेशन, टीवी, और सीमित इनपुट वाले डिवाइस, और डेस्कटॉप ऐप्लिकेशन.

मुख्य अनुपालन की तारीखें

  • 28 फ़रवरी, 2022 - ओओबी फ़्लो के लिए, नए OAuth इस्तेमाल को ब्लॉक किया गया
  • 5 सितंबर, 2022 - नीति का पालन न करने वाले OAuth अनुरोधों के लिए, उपयोगकर्ताओं को चेतावनी देने वाला मैसेज दिखाया जा सकता है
  • 3 अक्टूबर, 2022 - 28 फ़रवरी, 2022 से पहले बनाए गए OAuth क्लाइंट के लिए, ओओबी फ़्लो की सुविधा बंद कर दी गई है
  • 31 जनवरी, 2023 - सभी मौजूदा क्लाइंट ब्लॉक कर दिए जाएंगे (इसमें छूट मिली हुई क्लाइंट भी शामिल हैं)

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

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

देखें कि क्या आप पर असर पड़ा है

यह सुविधा सिर्फ़ प्रोडक्शन ऐप्लिकेशन पर लागू होती है (यानी कि वे ऐप्लिकेशन जिनके पब्लिश होने की स्थिति प्रोडक्शन में पर सेट है. यह फ़्लो, पब्लिशिंग स्टेटस की जांच करने वाले ऐप्लिकेशन के लिए काम करता रहेगा.

Google API Console के OAuth Consent Screen page में अपने पब्लिश करने की स्थिति की समीक्षा करें. अगर किसी ऐसे प्रोजेक्ट में OOB फ़्लो का इस्तेमाल किया जा रहा है जिसका पब्लिशिंग स्टेटस "प्रोडक्शन में है" है, तो अगले चरण पर जाएं.

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

अपने ऐप्लिकेशन कोड की जांच करें या आउटगोइंग नेटवर्क कॉल (अगर आपका ऐप्लिकेशन OAuth लाइब्रेरी का इस्तेमाल कर रहा है), तो यह तय करें कि क्या Google OAuth अनुमति देने का अनुरोध, यूआरआई की मदद से, रीडायरेक्ट करने के लिए, Oob-1-5"> रीडायरेक्ट किया जा रहा है.

अपने ऐप्लिकेशन कोड की जांच करें

अपने ऐप्लिकेशन कोड के उस सेक्शन की समीक्षा करें जहां Google OAuth ऑथराइज़ेशन एंडपॉइंट को कॉल किया जा रहा है और तय करें कि redirect_uri पैरामीटर में इनमें से कोई वैल्यू है या नहीं:
  • redirect_uri=urn:ietf:wg:oauth:2.0:oob
  • redirect_uri=urn:ietf:wg:oauth:2.0:oob:auto
  • redirect_uri=oob
रीडायरेक्ट फ़्लो का एक सैंपल नीचे दिया गया दिखेगा:
https://accounts.google.com/o/oauth2/v2/auth?
response_type=code&
scope=<SCOPES>&
state=<STATE>&
redirect_uri=urn:ietf:wg:oauth:2.0:oob&
client_id=<CLIENT_ID>

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

आपके ऐप्लिकेशन के क्लाइंट टाइप के आधार पर, नेटवर्क कॉल की जांच करने का तरीका अलग-अलग होगा.
नेटवर्क कॉल की जांच करते समय, Google OAuth ऑथराइज़ेशन एंडपॉइंट को भेजे गए अनुरोधों को देखें और तय करें कि redirect_uri पैरामीटर में इनमें से कोई वैल्यू है या नहीं:
  • redirect_uri=urn:ietf:wg:oauth:2.0:oob
  • redirect_uri=urn:ietf:wg:oauth:2.0:oob:auto
  • redirect_uri=oob
रीडायरेक्ट फ़्लो का एक सैंपल कुछ ऐसा दिखेगा:
https://accounts.google.com/o/oauth2/v2/auth?
response_type=code&
scope=<SCOPES>&
state=<STATE>&
redirect_uri=urn:ietf:wg:oauth:2.0:oob&
client_id=<CLIENT_ID>

किसी सुरक्षित विकल्प पर माइग्रेट करें

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

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

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

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

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

सर्वर-साइड (ऑफ़लाइन) ऐक्सेस
नीचे दिए गए उदाहरण में, Android पर सर्वर साइड पर Google API को ऐक्सेस करने का तरीका बताया गया है.
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try {
  GoogleSignInAccount account = task.getResult(ApiException.class);
  
  // request a one-time authorization code that your server exchanges for an
  // access token and sometimes refresh token
  String authCode = account.getServerAuthCode();
  
  // Show signed-in UI
  updateUI(account);

  // TODO(developer): send code to server and exchange for access/refresh/ID tokens
} catch (ApiException e) {
  Log.w(TAG, "Sign-in failed", e);
  updateUI(null);
}

Google API को सर्वर साइड से ऐक्सेस करने के तरीके के बारे में जानने के लिए, सर्वर साइड ऐक्सेस गाइड देखें.

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 के लिए ऑब्जेक्ट-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 ऐप्लिकेशन के क्लाइंट पर OOB फ़्लो का इस्तेमाल कर रहा है, तो आपको Chrome Identity API का इस्तेमाल करके माइग्रेट करना चाहिए.

नीचे दिए गए उदाहरण में, OOB रीडायरेक्ट यूआरआई का इस्तेमाल किए बिना सभी उपयोगकर्ता संपर्कों को पाने का तरीका दिखाया गया है.

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 गाइड देखें.

वेब ऐप्लिकेशन

अगर आपको यह पता चलता है कि आपका ऐप्लिकेशन किसी वेब ऐप्लिकेशन के लिए OOB फ़्लो का इस्तेमाल कर रहा है, तो आपको Google API की किसी क्लाइंट लाइब्रेरी का इस्तेमाल करना होगा. अलग-अलग प्रोग्रामिंग भाषाओं की क्लाइंट लाइब्रेरी की सूची यहां दी गई है.

लाइब्रेरी की मदद से, Google API को आसानी से ऐक्सेस किया जा सकता है और Google एंडपॉइंट पर सभी कॉल मैनेज किए जा सकते हैं.

सर्वर-साइड (ऑफ़लाइन) ऐक्सेस
सर्वर-साइड (ऑफ़लाइन) ऐक्सेस मोड का इस्तेमाल करने के लिए, आपको ये काम करने होंगे:
  • ऑथराइज़ेशन कोड पाने के लिए, सर्वर बनाएं और सार्वजनिक तौर पर ऐक्सेस किया जा सकने वाला एंडपॉइंट (रीडायरेक्ट यूआरआई) तय करें.
  • Google API Consoleमें रीडायरेक्ट यूआरआई को Credentials page कॉन्फ़िगर करें

यहां दिया गया कोड स्निपेट, Google Drive API का इस्तेमाल करने का NodeJS उदाहरण दिखाता है. इस उदाहरण में बताया गया है कि ओओबी रीडायरेक्ट यूआरआई का इस्तेमाल किए बिना, उपयोगकर्ता की Google Drive फ़ाइलों को सर्वर साइड पर लिस्ट किया जा सकता है.

async function main() {
  const server = http.createServer(async function (req, res) {

  if (req.url.startsWith('/oauth2callback')) {
    let q = url.parse(req.url, true).query;

    if (q.error) {
      console.log('Error:' + q.error);
    } else {
      
      // Get access and refresh tokens (if access_type is offline)
      let { tokens } = await oauth2Client.getToken(q.code);
      oauth2Client.setCredentials(tokens);

      // Example of using Google Drive API to list filenames in user's Drive.
      const drive = google.drive('v3');
      drive.files.list({
        auth: oauth2Client,
        pageSize: 10,
        fields: 'nextPageToken, files(id, name)',
      }, (err1, res1) => {
        // TODO(developer): Handle response / error.
      });
    }
  }
}

Google API को सर्वर साइड से ऐक्सेस करने के तरीके के बारे में जानने के लिए, सर्वर-साइड वेब ऐप्लिकेशन गाइड देखें.

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

JavaScript में दिया गया नीचे दिया गया कोड स्निपेट, Google API का इस्तेमाल करके, क्लाइंट साइड पर उपयोगकर्ता के कैलेंडर इवेंट को ऐक्सेस करने का उदाहरण दिखाता है.


// initTokenClient() initializes a new token client with your
// web app's client ID and the scope you need access to

const client = google.accounts.oauth2.initTokenClient({
  client_id: 'YOUR_GOOGLE_CLIENT_ID',
  scope: 'https://www.googleapis.com/auth/calendar.readonly',
  
  // callback function to handle the token response
  callback: (tokenResponse) => {
    if (tokenResponse && tokenResponse.access_token) { 
      gapi.client.setApiKey('YOUR_API_KEY');
      gapi.client.load('calendar', 'v3', listUpcomingEvents);
    }
  },
});

function listUpcomingEvents() {
  gapi.client.calendar.events.list(...);
}

Google API को क्लाइंट साइड से ऐक्सेस करने के तरीके के बारे में जानने के लिए, क्लाइंट-साइड वेब ऐप्लिकेशन गाइड देखें.

डेस्कटॉप क्लाइंट

अगर आपको यह पता चलता है कि आपका ऐप्लिकेशन, डेस्कटॉप क्लाइंट पर ओओबी फ़्लो का इस्तेमाल कर रहा है, तो आपको लूपबैक आईपी पते (localhost या 127.0.0.1) फ़्लो का इस्तेमाल करके माइग्रेट करना चाहिए.