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

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

نقل البيانات من رمز الدخول غير المتوافق

يجب عدم إرسال رموز الوصول التي تم الحصول عليها باستخدام 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 الأخرى، مثل 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);
}

نقل البيانات من مسار رمز تعريف GoogleAuthUtil

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

على سبيل المثال، إذا كان رمز Android يبدو مثل المثال التالي، عليك نقل البيانات:

رمز Android

في المثال، تستخدم طلبات الرموز المميّزة للمعرّف audience:server:client_id بالإضافة إلى معرّف العميل لخادم الويب كمعلمة "النطاق" لاستدعاء GoogleAuthUtil.getToken (audience: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.requestIdToken(...).

من جهة الخادم

تُصدر واجهة برمجة التطبيقات الجديدة Sign-In API رموزًا مميّزة لتعريف المستخدمين تتوافق مع مواصفات OpenID Connect ، على عكس GoogleAuthUtil.getToken التي تستخدم تنسيقًا تم إيقافه نهائيًا. على وجه التحديد، جهة الإصدار الآن هي https://accounts.google.com، باستخدام مخطّط https.

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

  • ‫Java (مكتبات برامج Google APIs): الترقية إلى الإصدار 1.21.0 أو إصدار أحدث
  • ‫PHP (مكتبات عملاء واجهات برمجة تطبيقات Google): إذا كنت تستخدم الإصدار 1، عليك الترقية إلى الإصدار 1.1.6 أو إصدار أحدث، وإذا كنت تستخدم الإصدار 2، عليك الترقية إلى الإصدار 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 + معرّف العميل لخادم الويب كمَعلمة 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، حتى تتمكّن من الحصول على رمز تعريف يحتوي على عنوان البريد الإلكتروني للمستخدم ومعرّفه ومعلومات ملفه الشخصي بدون الحاجة إلى إجراء 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);
...