GoogleAuthUtil और Plus.API से माइग्रेट करें

अगर आपने GoogleAuthUtil.getToken या Plus.API का इस्तेमाल करके पहले भी 'Google साइन-इन' के साथ इंटिग्रेट किया था, तो आपको बेहतर सुरक्षा और बेहतर उपयोगकर्ता अनुभव के लिए नए 'साइन-इन' एपीआई पर माइग्रेट करना चाहिए.

ऐक्सेस टोकन से माइग्रेट करने वाले एंटी-पैटर्न

आपको GoogleAuthUtil.getToken से मिले ऐक्सेस टोकन को पहचान के दावे के तौर पर, अपने बैकएंड सर्वर को नहीं भेजना चाहिए. ऐसा इसलिए, क्योंकि इस बात की आसानी से पुष्टि नहीं की जा सकती कि टोकन आपके बैकएंड को जारी किया गया था. इसकी वजह से, किसी हमलावर से ऐक्सेस टोकन को शामिल करने का जोखिम आपको उठाना चाहिए.

उदाहरण के लिए, अगर आपका Android कोड नीचे दिए गए उदाहरण की तरह दिखता है, तो आपको अपना ऐप्लिकेशन मौजूदा सबसे सही तरीकों पर माइग्रेट करना चाहिए.

Android कोड

उदाहरण में, ऐक्सेस टोकन के अनुरोधों में GoogleAuthUtil.getToken कॉल (oauth2:https://www.googleapis.com/auth/plus.login) के लिए, scope पैरामीटर के तौर पर oauth2: और स्कोप स्ट्रिंग का इस्तेमाल किया जाता है.

GoogleAuthUtil.getToken से मिले ऐक्सेस टोकन से पुष्टि करने के बजाय, आईडी टोकन फ़्लो या ऑथराइज़ेशन कोड के फ़्लो का इस्तेमाल करें.

आईडी टोकन फ़्लो पर माइग्रेट करें

अगर आपको सिर्फ़ उपयोगकर्ता का आईडी, ईमेल पता, नाम या प्रोफ़ाइल फ़ोटो का यूआरएल चाहिए, तो आईडी टोकन फ़्लो का इस्तेमाल करें.

आईडी टोकन फ़्लो पर माइग्रेट करने के लिए, ये बदलाव करें:

Android क्लाइंट साइड

  • अगर GET_ACCOUNTS (संपर्क) के लिए अनुमति का अनुरोध किया जाता है, तो इसे हटा दें
  • GoogleAuthUtil, Plus.API,AccountPicker.newChooseAccountIntent() या AccountManager.newChooseAccountIntent() का इस्तेमाल करके, किसी भी कोड को GoogleSignInOptions.Builder.requestIdToken(...) कॉन्फ़िगरेशन के साथ Auth.GOOGLE_SIGN_IN_API पर स्विच करें.

सर्वर साइड

  • आईडी टोकन की पुष्टि के लिए नया एंडपॉइंट बनाएं
  • आपके क्लाइंट ऐप्लिकेशन माइग्रेट होने के बाद, पुराना एंडपॉइंट बंद कर दें

सर्वर के पुष्टि कोड के फ़्लो पर माइग्रेट करना

अगर आपके सर्वर को Google Drive, YouTube या Contacts जैसे अन्य Google API को ऐक्सेस करना है, तो सर्वर की पुष्टि करने का कोड फ़्लो का इस्तेमाल करें.

सर्वर के पुष्टि कोड के फ़्लो पर माइग्रेट करने के लिए, ये बदलाव करें:

Android क्लाइंट साइड

  • अगर GET_ACCOUNTS (संपर्क) के लिए अनुमति का अनुरोध किया जाता है, तो इसे हटा दें
  • GoogleAuthUtil, Plus.API,AccountPicker.newChooseAccountIntent() या AccountManager.newChooseAccountIntent() का इस्तेमाल करके, किसी भी कोड को GoogleSignInOptions.Builder.requestServerAuthCode(...) कॉन्फ़िगरेशन के साथ Auth.GOOGLE_SIGN_IN_API पर स्विच करें.

सर्वर साइड

आपके पास अब भी अपने पुराने और नए एंडपॉइंट के बीच, एपीआई ऐक्सेस लॉजिक शेयर करने का विकल्प है. उदाहरण के लिए:

GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(...);
String accessToken = tokenResponse.getAccessToken();
String refreshToken = tokenResponse.getRefreshToken();
Long expiresInSeconds = tokenResponse.getExpiresInSeconds();

// Shared by your old and new implementation, old endpoint can pass null for refreshToken
private void driveAccess(String refreshToken, String accessToken, Long expiresInSeconds) {
   GoogleCredential credential = new GoogleCredential.Builder()
           .setTransPort(...)
           ...
           .build();
   credential.setAccessToken(accessToken);
   credential.setExpiresInSeconds(expiresInSeconds);
   credential.setRefreshToken(refreshToken);
}

GoogleAuthUtil आईडी टोकन फ़्लो से माइग्रेट करें

अगर आईडी टोकन पाने के लिए GoogleAuthUtil का इस्तेमाल किया जाता है, तो आपको नए साइन-इन एपीआई आईडी टोकन फ़्लो पर माइग्रेट करना चाहिए.

उदाहरण के लिए, अगर आपका Android कोड नीचे दिया गया उदाहरण जैसा दिखता है, तो आपको इसे माइग्रेट करना चाहिए:

Android कोड

उदाहरण में, आईडी टोकन अनुरोधों के लिए, GoogleAuthUtil.getToken कॉल (audience:server:client_id:9414861317621.apps.googleusercontent.com) के ‘स्कोप’ पैरामीटर के तौर पर, audience:server:client_id और आपके वेब सर्वर के क्लाइंट आईडी का इस्तेमाल किया जाता है.

नए साइन-इन एपीआई आईडी टोकन फ़्लो के ये फ़ायदे हैं:

  • एक टैप में साइन-इन करने का आसान अनुभव
  • आपका सर्वर बिना ज़्यादा नेटवर्क कॉल के उपयोगकर्ता की प्रोफ़ाइल की जानकारी पा सकता है

आईडी टोकन फ़्लो पर माइग्रेट करने के लिए, ये बदलाव करें:

Android क्लाइंट साइड

  • अगर GET_ACCOUNTS (संपर्क) के लिए अनुमति का अनुरोध किया जाता है, तो इसे हटा दें
  • GoogleAuthUtil, Plus.API,AccountPicker.newChooseAccountIntent() या AccountManager.newChooseAccountIntent() का इस्तेमाल करके, किसी भी कोड को GoogleSignInOptions.Builder.requestIdToken(...) कॉन्फ़िगरेशन के साथ Auth.GOOGLE_SIGN_IN_API पर स्विच करें.

सर्वर साइड

नया 'साइन-इन' एपीआई, ऐसे आईडी टोकन जारी करता है जो UPI Connect की खासियत का पालन करते हैं. यह GoogleAuthUtil.getToken के उलट है, जो काम न करने वाले फ़ॉर्मैट का इस्तेमाल करता है. खास तौर पर, जारी करने वाला, अब https स्कीमा के साथ https://accounts.google.com है.

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

  • Java (Google API क्लाइंट लाइब्रेरी): 1.21.0 या इसके बाद के वर्शन में अपग्रेड करें
  • PHP (Google API क्लाइंट लाइब्रेरी): अगर आप v1 का इस्तेमाल करते हैं, तो 1.1.6 या इससे नए वर्शन में अपग्रेड करें; अगर v2 का इस्तेमाल किया जा रहा है, तो 2.0.0-RC1 या इससे नए वर्शन में अपग्रेड करें
  • Node.js: 0.9.7 या इससे नए वर्शन में अपग्रेड करें
  • Python या आपके खुद के लागू: इन दोनों जारी करने वालों को स्वीकार करें: https://accounts.google.com और accounts.google.com

GoogleAuthUtil सर्वर के ऑथराइज़ेशन कोड के फ़्लो से माइग्रेट करें

अगर सर्वर की पुष्टि करने वाला कोड पाने के लिए, GoogleAuthUtil का इस्तेमाल किया जाता है, तो आपको Sign-In API ऑथराइज़ेशन कोड के नए फ़्लो पर माइग्रेट करना चाहिए.

उदाहरण के लिए, अगर आपका Android कोड नीचे दिया गया उदाहरण जैसा दिखता है, तो आपको इसे माइग्रेट करना चाहिए:

Android कोड

उदाहरण में, सर्वर की पुष्टि करने वाले कोड के अनुरोधों में, आपके वेब सर्वर के लिए oauth2:server:client_id + क्लाइंट आईडी का इस्तेमाल, GoogleAuthUtil.getToken कॉल (oauth2:server:client_id:9414861317621.apps.googleusercontent.com) के scope पैरामीटर के तौर पर किया जाता है.

नए Sign-In API के ऑथराइज़ेशन कोड के फ़्लो के ये फ़ायदे हैं:

  • एक टैप में साइन-इन करने का आसान अनुभव
  • नीचे दी गई माइग्रेशन गाइड का पालन करने पर, आपके सर्वर को एक आईडी टोकन मिल सकता है. इसमें उपयोगकर्ता की प्रोफ़ाइल की जानकारी होती है. ऐसा तब होता है, जब ऑथराइज़ेशन कोड को एक्सचेंज किया जाता है

पुष्टि करने वाले नए कोड के नए फ़्लो पर माइग्रेट करने के लिए, ये बदलाव करें:

Android क्लाइंट साइड

  • अगर GET_ACCOUNTS (संपर्क) के लिए अनुमति का अनुरोध किया जाता है, तो इसे हटा दें
  • GoogleAuthUtil, Plus.API,AccountPicker.newChooseAccountIntent() या AccountManager.newChooseAccountIntent() का इस्तेमाल करके, किसी भी कोड को GoogleSignInOptions.Builder.requestServerAuthCode(...) कॉन्फ़िगरेशन के साथ Auth.GOOGLE_SIGN_IN_API पर स्विच करें.

सर्वर साइड

अपने मौजूदा कोड को बनाए रखें, लेकिन GoogleAuthorizationCodeTokenRequest ऑब्जेक्ट बनाते समय, https://oauth2.googleapis.com/token को टोकन सर्वर एंडपॉइंट के तौर पर तय करें. इससे, आपको किसी दूसरे नेटवर्क कॉल की ज़रूरत के बिना, उपयोगकर्ता के ईमेल, यूज़र आईडी, और प्रोफ़ाइल की जानकारी के साथ आईडी टोकन मिल सके. यह एंडपॉइंट पूरी तरह पुराने और पुराने सिस्टम के साथ काम करता है. नीचे दिया गया कोड, सर्वर की पुष्टि करने वाले उन कोड के साथ काम करेगा जो आपके पुराने और नए Android क्लाइंट इंप्लीमेंटेशन, दोनों से मिले हैं.

GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(
                transport,
                jsonFactory,
                // Use below for tokenServerEncodedUrl parameter
                "https://oauth2.googleapis.com/token",
                clientSecrets.getDetails().getClientId(),
                clientSecrets.getDetails().getClientSecret(),
                authCode,
                REDIRECT_URI)
               .execute();

...

// You can also get an ID token from auth code exchange.
GoogleIdToken googleIdToken = tokenResponse.parseIdToken();
GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
        .setAudience(Arrays.asList(SERVER_CLIENT_ID))
        .setIssuer("https://accounts.google.com")
        .build();
// Refer to ID token documentation to see how to get data from idToken object.
GoogleIdToken idToken = verifier.verify(idTokenString);
...