खास जानकारी
हमने 16 फ़रवरी, 2022 को ऐलान किया था कि हम Google OAuth इंटरैक्शन को ज़्यादा सुरक्षित बनाने के लिए, 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 सहमति स्क्रीन पर रजिस्टर किया है.
माइग्रेशन की प्रोसेस पूरी करने के लिए, आपको दो मुख्य चरण पूरे करने होंगे:
- यह पता लगाना कि आपके खाते पर असर पड़ा है या नहीं.
- अगर आपको इस बदलाव से असर पड़ा है, तो किसी ऐसे तरीके का इस्तेमाल करें जो काम करता हो.
यह पता लगाना कि क्या आपके खाते पर असर पड़ा है
अपने OAuth ऐप्लिकेशन टाइप की समीक्षा करना
Google Cloud Console के Clients पेज पर जाएं. इसके बाद, OAuth 2.0 Client IDs सेक्शन में जाकर, अपने OAuth ऐप्लिकेशन का टाइप देखें. इनमें से कोई एक विकल्प चुनें: वेब ऐप्लिकेशन, Android, iOS, यूनिवर्सल Windows प्लैटफ़ॉर्म (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>
आउटगोइंग नेटवर्क कॉल की जांच करना
नेटवर्क कॉल की जांच करने का तरीका, आपके ऐप्लिकेशन के टाइप के हिसाब से अलग-अलग होगा.
- वेब ऐप्लिकेशन - Chrome पर नेटवर्क गतिविधि की जांच करना
- Android - नेटवर्क इंस्पेक्टर की मदद से नेटवर्क ट्रैफ़िक की जांच करना
- Chrome ऐप्लिकेशन
- Chrome एक्सटेंशन पेज पर जाएं
- एक्सटेंशन पेज के सबसे ऊपर दाएं कोने में मौजूद, डेवलपर मोड चेकबॉक्स को चुनें
- वह एक्सटेंशन चुनें जिसे आपको मॉनिटर करना है
- एक्सटेंशन पेज के व्यू की जांच करें सेक्शन में, बैकग्राउंड पेज लिंक पर क्लिक करें
- इसके बाद, डेवलपर टूल डायलॉग बॉक्स खुलेगा. इसमें नेटवर्क टैब में जाकर, नेटवर्क ट्रैफ़िक को मॉनिटर किया जा सकता है
- iOS - Analyzing HTTP traffic with Instruments
- डेस्कटॉप ऐप्लिकेशन - उस ऑपरेटिंग सिस्टम के लिए उपलब्ध नेटवर्क कैप्चर टूल का इस्तेमाल करें जिसके लिए ऐप्लिकेशन को डेवलप किया गया था
नेटवर्क कॉल की जांच करते समय, 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) का इस्तेमाल करना चाहिए.
एसडीके की मदद से, Google API को ऐक्सेस किया जा सकता है. साथ ही, यह Google के OAuth 2.0 अनुमति एंडपॉइंट पर किए जाने वाले सभी कॉल को मैनेज करता है.
यहां दिए गए दस्तावेज़ के लिंक में, सुझाए गए एसडीके टूल इस्तेमाल करने का तरीका बताया गया है. इससे, लूपबैक आईपी पते वाले रीडायरेक्ट यूआरआई का इस्तेमाल किए बिना, Google API को ऐक्सेस किया जा सकता है.
Android पर Google API ऐक्सेस करना
क्लाइंट-साइड ऐक्सेस
यहां दिए गए उदाहरण में, Google Identity Services Android लाइब्रेरी का इस्तेमाल करके, Android पर क्लाइंट साइड से Google API को ऐक्सेस करने का तरीका बताया गया है. इस लाइब्रेरी का इस्तेमाल करने का सुझाव दिया जाता है.
List<Scopes> 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<Scopes> 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) के हेडर में शामिल करें या Objective-C for REST के लिए 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 following example 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 की गाइड देखें.