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