نقل البيانات من 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 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);
}

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

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

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

رمز Android

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

أثناء عملية النقل، يحتاج خادمك إلى التحقّق من الرمز المميّز للمعرّف من كليهما. برامج 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

نقل البيانات من مسار رمز مصادقة خادم GoogleAuthUtil

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

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

رمز Android

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

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

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

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

جهة عميل 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);
...