نقل البيانات من GoogleAuthUtil وPlus.API

إذا سبق لك الدمج مع ميزة "تسجيل الدخول بحساب Google" باستخدام GoogleAuthUtil.getToken أو Plus.API، عليك نقل البيانات إلى أحدث واجهة برمجة تطبيقات لميزة "تسجيل الدخول بحساب Google" للاستفادة من مستوى أمان أفضل وتجربة مستخدم أفضل.

النقل من نمط رمز الدخول المضاد

يجب عدم إرسال رموز الدخول التي تم الحصول عليها باستخدام GoogleAuthUtil.getToken إلى الخادم الخلفي كتأكيد للهوية، لأنّه لا يمكنك بسهولة التحقّق من أنّه تم إصدار الرمز المميّز للخلفية، ما يجعلك عرضة لإدراج رمز الدخول من المهاجم.

على سبيل المثال، إذا كانت رمز Android الخاص بك يشبه المثال الموضّح أدناه، عليك نقل تطبيقك إلى أفضل الممارسات الحالية.

رمز Android

في المثال، تستخدم طلبات رمز الدخول oauth2: بالإضافة إلى سلسلة نطاق كمَعلمة scope لطلب GoogleAuthUtil.getToken (oauth2:https://www.googleapis.com/auth/plus.login).

بدلاً من المصادقة باستخدام رمز الدخول الذي تم الحصول عليه من خلال GoogleAuthUtil.getToken، يمكنك استخدام مسار الرمز المميّز لرقم التعريف أو مسار رمز المصادقة.

نقل البيانات إلى مسار الرمز المميّز لرقم التعريف

إذا كنت بحاجة فقط إلى رقم تعريف المستخدم أو عنوان بريده الإلكتروني أو اسمه أو عنوان URL الخاص بصورة الملف الشخصي، يمكنك استخدام مسار الرمز المميّز لرقم التعريف.

لنقل البيانات إلى مسار الرمز المميّز لرقم التعريف، عليك إجراء التغييرات التالية:

جانب عميل Android

  • إزالة إذن GET_ACCOUNTS (جهات الاتصال) إذا طلبته
  • يمكنك تبديل أي رمز باستخدام GoogleAuthUtil أو Plus.API أو AccountPicker.newChooseAccountIntent() أو AccountManager.newChooseAccountIntent() إلى Auth.GOOGLE_SIGN_IN_API من خلال إعدادات GoogleSignInOptions.Builder.requestIdToken(...).

من جهة الخادم

النقل إلى مسار رمز مصادقة الخادم

إذا كان خادمك بحاجة إلى الوصول إلى واجهات Google APIs الأخرى، مثل Google Drive أو YouTube أو "جهات الاتصال"، استخدِم مسار رمز مصادقة الخادم.

لنقل البيانات إلى مسار رمز مصادقة الخادم، عليك إجراء التغييرات التالية:

جانب عميل Android

  • إزالة إذن GET_ACCOUNTS (جهات الاتصال) إذا طلبته
  • يمكنك تبديل أي رمز باستخدام GoogleAuthUtil أو Plus.API أو AccountPicker.newChooseAccountIntent() أو AccountManager.newChooseAccountIntent() إلى Auth.GOOGLE_SIGN_IN_API من خلال إعدادات GoogleSignInOptions.Builder.requestServerAuthCode(...).

من جهة الخادم

سيظل بإمكانك مشاركة منطق الوصول إلى واجهة برمجة التطبيقات بين نقاط النهاية القديمة والجديدة. على سبيل المثال:

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);
}

نقل البيانات من مسار الرمز المميّز لرقم تعريف GoogleAuthU {5}

إذا كنت تستخدم "GoogleAuthUtil" للحصول على الرموز المميّزة لرقم التعريف، عليك نقل البيانات إلى مسار الرمز المميّز لرقم التعريف الجديد في واجهة برمجة التطبيقات لتسجيل الدخول.

على سبيل المثال، إذا كان رمز Android الخاص بك يظهر على النحو التالي، عليك نقل البيانات:

رمز Android

في المثال، تستخدم طلبات الرمز المميز للمعرف audience:server:client_id بالإضافة إلى معرّف العميل لخادم الويب الخاص بك كمعلمة "scope" لاستدعاء GoogleAuthUtil.getToken (audience:server:client_id:9414861317621.apps.googleusercontent.com).

سيوفّر مسار الرمز المميز الجديد لرقم تعريف واجهة برمجة التطبيقات لتسجيل الدخول المزايا التالية:

  • تجربة سهلة لتسجيل الدخول بنقرة واحدة
  • يمكن لخادمك الحصول على معلومات الملف الشخصي للمستخدم بدون الاتصال بالشبكة الإضافية.

لنقل البيانات إلى مسار الرمز المميّز لرقم التعريف، عليك إجراء التغييرات التالية:

جانب عميل Android

  • إزالة إذن GET_ACCOUNTS (جهات الاتصال) إذا طلبته
  • يمكنك تبديل أي رمز باستخدام GoogleAuthUtil أو Plus.API أو AccountPicker.newChooseAccountIntent() أو AccountManager.newChooseAccountIntent() إلى Auth.GOOGLE_SIGN_IN_API من خلال إعدادات GoogleSignInOptions.Builder.requestIdToken(...).

من جهة الخادم

الرموز المميزة لرقم تعريف المشاكل في واجهة برمجة التطبيقات لتسجيل الدخول الجديدة التي تتوافق مع مواصفات OpenID Connect، على عكس GoogleAuthUtil.getToken الذي يستخدم تنسيقًا متوقفًا. وعلى وجه التحديد، أصبحت جهة الإصدار الآن https://accounts.google.com، مع مخطط https.

أثناء عملية النقل، يحتاج خادمك إلى إثبات ملكية الرمز المميّز للمعرّف من كل من برنامجَي Android القديم والجديد. للتحقّق من صحة تنسيقَي الرمز المميّز، عليك إجراء التغيير الذي يتوافق مع مكتبة البرامج التي تستخدمها (إذا كنت تستخدم أيًا منها):

  • Java (مكتبات عملاء Google APIs): الترقية إلى الإصدار 1.21.0 أو إصدار أحدث
  • لغة PHP (مكتبات عملاء Google APIs): إذا كنت تستخدم الإصدار 1، يجب الترقية إلى الإصدار 1.1.6 أو إصدار أحدث، وفي حال استخدام الإصدار 2، يجب الترقية إلى الإصدار 2.0.0-RC1 أو إصدار أحدث
  • Node.js: الترقية إلى 0.9.7 أو إصدار أحدث
  • Python أو عمليات التنفيذ الخاصة بك: يجب قبول كِلا جهات الإصدار التالية: https://accounts.google.com وaccounts.google.com

نقل البيانات من مسار رمز المصادقة الخاص بخادم GoogleAuthU {5}

إذا كنت تستخدم GoogleAuthUtil للحصول على رمز مصادقة للخادم، عليك نقل البيانات إلى مسار رمز المصادقة الجديد الخاص بواجهة تسجيل الدخول إلى واجهة برمجة التطبيقات.

على سبيل المثال، إذا كان رمز Android الخاص بك يظهر على النحو التالي، عليك نقل البيانات:

رمز Android

في المثال، تستخدِم طلبات رمز مصادقة الخادم oauth2:server:client_id + معرّف العميل لخادم الويب كمعلّمة scope لاستدعاء GoogleAuthUtil.getToken (oauth2:server:client_id:9414861317621.apps.googleusercontent.com).

يتميّز مسار رمز المصادقة الجديد لواجهة برمجة التطبيقات Sign-In API بالمزايا التالية:

  • تجربة سهلة لتسجيل الدخول بنقرة واحدة
  • إذا تم اتّباع دليل النقل أدناه، يمكن لخادمك الحصول على رمز تعريف مميز يحتوي على معلومات الملف الشخصي للمستخدم عند إجراء عملية تبادل رمز المصادقة.

للانتقال إلى مسار رمز المصادقة الجديد، عليك إجراء التغييرات التالية:

جانب عميل Android

  • إزالة إذن GET_ACCOUNTS (جهات الاتصال) إذا طلبته
  • يمكنك تبديل أي رمز باستخدام GoogleAuthUtil أو Plus.API أو AccountPicker.newChooseAccountIntent() أو AccountManager.newChooseAccountIntent() إلى Auth.GOOGLE_SIGN_IN_API من خلال إعدادات GoogleSignInOptions.Builder.requestServerAuthCode(...).

من جهة الخادم

احتفِظ بالرمز الحالي مع تحديد https://oauth2.googleapis.com/token على أنّه نقطة نهاية خادم الرمز المميّز عند إنشاء عنصر GoogleAuthorizationCodeTokenRequest، كي تتمكّن من الحصول على رمز مميز للمعرّف يتضمّن عنوان البريد الإلكتروني للمستخدم ورقم تعريفه ومعلومات الملف الشخصي الخاصة به بدون الحاجة إلى اتصال آخر بالشبكة. نقطة النهاية هذه متوافقة تمامًا مع الأنظمة القديمة، وسيتوافق الرمز البرمجي التالي مع رموز مصادقة الخادم التي تم استردادها من تطبيقَي برنامج 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);
...