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