إذا كنت تستخدم نظام تسجيل الدخول باستخدام حساب Google في السابق باستخدام
GoogleAuthUtil.getToken
أو Plus.API
، يجب الانتقال إلى أحدث إصدار
واجهة برمجة التطبيقات لتسجيل الدخول للحصول على مستوى أمان أفضل وتجربة مستخدم أفضل
نقل البيانات من نمط مضاد لرمز الدخول
يجب عدم إرسال رموز الدخول التي تم الحصول عليها باستخدام GoogleAuthUtil.getToken
إلى
خادمك الخلفي كتأكيد للهوية، نظرًا لأنه لا يمكنك التحقق من
أنه تم إصدار الرمز المميز للواجهة الخلفية، مما يجعلك عرضة للإدراج
لرمز الدخول من مهاجم.
على سبيل المثال، إذا كان رمز 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:
في المثال، تستخدم طلبات الرموز المميّزة للمعرّف السمة 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:
في المثال، تستخدم طلبات رمز مصادقة الخادم 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); ...