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