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 (संपर्क) की अनुमति हटाना
  • GoogleSignInOptions.Builder.requestServerAuthCode(...) कॉन्फ़िगरेशन के साथ, GoogleAuthUtil, Plus.API, AccountPicker.newChooseAccountIntent() या AccountManager.newChooseAccountIntent() का इस्तेमाल करके किसी भी कोड को 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 का इस्तेमाल किया जाता है, तो आपको Sign-In API के नए आईडी टोकन फ़्लो पर माइग्रेट करना चाहिए.

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

Android कोड

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

Sign-In API के नए आईडी टोकन फ़्लो के ये फ़ायदे हैं:

  • One Tap साइन-इन की सुविधा को आसान बनाया गया
  • आपका सर्वर, अतिरिक्त नेटवर्क कॉल के बिना उपयोगकर्ता की प्रोफ़ाइल की जानकारी पा सकता है

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

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

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

सर्वर साइड

नया Sign-In API, OpenID Connect के स्पेसिफ़िकेशन के मुताबिक आईडी टोकन जारी करता है. यह GoogleAuthUtil.getToken से अलग है, जो अब इस्तेमाल नहीं किए जाने वाले फ़ॉर्मैट का इस्तेमाल करता है. खास तौर पर, इसे अब https://accounts.google.com जारी किया गया है. इसमें https स्कीमा है.

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

  • Java (Google APIs क्लाइंट लाइब्रेरी): 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 के नए ऑथराइज़ेशन कोड फ़्लो के ये फ़ायदे हैं:

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

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

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

  • अनुरोध करने पर, GET_ACCOUNTS (संपर्क) की अनुमति हटाना
  • GoogleSignInOptions.Builder.requestServerAuthCode(...) कॉन्फ़िगरेशन के साथ, GoogleAuthUtil, Plus.API, AccountPicker.newChooseAccountIntent() या AccountManager.newChooseAccountIntent() का इस्तेमाल करके किसी भी कोड को 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);
...