खास जानकारी
हमने 16 फ़रवरी, 2022 को ज़्यादा सुरक्षित OAuth फ़्लो का इस्तेमाल करके, Google OAuth के इस्तेमाल को ज़्यादा सुरक्षित बनाने का प्लान एलान किया था. इस गाइड से, आपको ज़रूरी बदलावों को समझने और OAuth के आउट-ऑफ़-बैंड (OOB) फ़्लो से, काम करने वाले अन्य विकल्पों पर माइग्रेट करने में मदद मिलती है.
यह कोशिश, Google के OAuth 2.0 ऑथराइज़ेशन एंडपॉइंट के साथ इंटरैक्शन के दौरान, फ़िशिंग और ऐप्लिकेशन के नाम पर काम करने के हमलों से सुरक्षा का एक उपाय है.
ओओबी क्या है?
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 के लिए सहमति देने वाली स्क्रीन में रजिस्टर किए गए सहायता ईमेल को दिखाते समय किया जाता है.
- देखें कि क्या आप पर इसका असर पड़ा है.
- अगर आप पर असर पड़ता है, तो ज़्यादा सुरक्षित विकल्प पर माइग्रेट करें.
देखें कि क्या आप पर असर पड़ा है
यह सुविधा सिर्फ़ प्रोडक्शन ऐप्लिकेशन पर लागू होती है (यानी कि वे ऐप्लिकेशन जिनके पब्लिश होने की स्थिति प्रोडक्शन में सेट होती है. यह फ़्लो, पब्लिशिंग स्टेटस वाले ऐप्लिकेशन के लिए काम करता रहेगा.
के OAuth में पब्लिश करने की स्थिति की समीक्षा करें. साथ ही, अगर किसी ऐसे प्रोजेक्ट में ओओबी फ़्लो का इस्तेमाल किया जा रहा है जिसका पब्लिशिंग स्टेटस "प्रोडक्शन में" है, तो अगले चरण पर जाएं.
यह कैसे तय करें कि आपका ऐप्लिकेशन ओओबी फ़्लो का इस्तेमाल कर रहा है या नहीं
अपने ऐप्लिकेशन कोड की जांच करें या आउटगोइंग नेटवर्क कॉल (अगर आपका ऐप्लिकेशन OAuth लाइब्रेरी का इस्तेमाल कर रहा है) की जांच करें. इससे यह पता चल पाएगा कि आपके ऐप्लिकेशन में, Google OAuth के लिए अनुमति का अनुरोध करने के लिए, OOB रीडायरेक्ट यूआरआई वैल्यू का इस्तेमाल किया जा रहा है या नहीं.
अपने ऐप्लिकेशन कोड की जांच करें
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>
आउटगोइंग नेटवर्क कॉल की जांच करें
- वेब ऐप्लिकेशन - Chrome पर नेटवर्क गतिविधि की जांच करें
- Android - नेटवर्क इंस्पेक्टर की मदद से, नेटवर्क ट्रैफ़िक की जांच करें
-
Chrome ऐप्लिकेशन
- Chrome एक्सटेंशन पेज पर जाएं
- एक्सटेंशन पेज पर सबसे ऊपर दाएं कोने में मौजूद, डेवलपर मोड चेकबॉक्स को चुनें
- वह एक्सटेंशन चुनें जिसे मॉनिटर करना है
- एक्सटेंशन पेज के व्यू की जांच करें सेक्शन में बैकग्राउंड पेज लिंक पर क्लिक करें
- इसके बाद, एक डेवलपर टूल पॉप-अप खुलेगा. नेटवर्क टैब में जाकर, नेटवर्क ट्रैफ़िक की निगरानी की जा सकती है
- iOS - इंस्ट्रुमेंट की मदद से एचटीटीपी ट्रैफ़िक का विश्लेषण करना
- Universal Windows Platform (UWP) - Visual Studio में नेटवर्क ट्रैफ़िक की जांच करें
- डेस्कटॉप ऐप्लिकेशन - उस ऑपरेटिंग सिस्टम के लिए उपलब्ध नेटवर्क कैप्चर टूल का इस्तेमाल करते हैं जिसके लिए ऐप्लिकेशन को बनाया गया है
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 को ऐक्सेस करने का तरीका जानने के लिए, क्लाइंट-साइड ऐक्सेस गाइड देखें. क्लाइंट-साइड पर 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 की गाइड देखें.
वेब ऐप्लिकेशन
अगर आपको लगता है कि आपका ऐप्लिकेशन किसी वेब ऐप्लिकेशन के लिए ओओबी फ़्लो का इस्तेमाल कर रहा है, तो आपको Google API की किसी क्लाइंट लाइब्रेरी की मदद से माइग्रेट करना चाहिए. अलग-अलग प्रोग्रामिंग भाषाओं के लिए क्लाइंट लाइब्रेरी की सूची यहां दी गई है.
लाइब्रेरी, Google API को ऐक्सेस करना और Google एंडपॉइंट पर किए जाने वाले सभी कॉल हैंडल करना आसान बनाती हैं.
सर्वर-साइड (ऑफ़लाइन) ऐक्सेस
- ऑथराइज़ेशन कोड पाने के लिए, सर्वर बनाएं और सार्वजनिक तौर पर ऐक्सेस किया जा सकने वाला एंडपॉइंट (रीडायरेक्ट यूआरआई) तय करें.
- के में रीडायरेक्ट यूआरआई को कॉन्फ़िगर करें
नीचे दिए गए कोड स्निपेट में एक NodeJS उदाहरण दिखाया गया है, जिसमें Google Drive API का इस्तेमाल करके, उपयोगकर्ता की Google Drive फ़ाइलों को सर्वर साइड पर लिस्ट करने के लिए बताया गया है. ऐसा, OOB रीडायरेक्ट यूआरआई का इस्तेमाल किए बिना किया गया है.
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
) फ़्लो का इस्तेमाल करके माइग्रेट करना चाहिए.