تسجيل الدخول على أجهزة التلفزيون وأجهزة الإدخال المحدودة

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

يعرض التطبيق رمزًا قصيرًا وعنوان URL لتسجيل الدخول للمستخدم. وبعد ذلك يفتح المستخدم عنوان URL لتسجيل الدخول في أحد متصفحات الويب ويدخِل الرمز ويمنح التطبيق إذنًا بالوصول إلى معلومات تسجيل الدخول. وأخيرًا، يتلقى التطبيق تأكيدًا ويتم تسجيل دخول المستخدم.

لاستخدام تدفق تسجيل الدخول هذا، يجب تشغيل التطبيق على جهاز يستوفي المعايير التالية:

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

الحصول على معرِّف العميل وسر العميل

يحتاج تطبيقك إلى معرِّف عميل OAuth 2.0 وسر العميل لإجراء طلبات إلى نقاط نهاية تسجيل الدخول في Google.

للعثور على معرِّف العميل لمشروعك وسره، يمكنك إجراء ما يلي:

  1. اختَر بيانات اعتماد OAuth 2.0 حالية أو افتح صفحة بيانات الاعتماد.
  2. إذا لم تكن قد فعلت ذلك من قبل، يمكنك إنشاء بيانات اعتماد OAuth 2.0 لمشروعك من خلال النقر على إنشاء بيانات اعتماد &gt؛ معرّف عميل OAuth، وتقديم المعلومات اللازمة لإنشاء بيانات الاعتماد.
  3. ابحث عن معرِّف العميل في قسم معرِّفات عميل OAuth 2.0. لمعرفة التفاصيل، انقر على معرِّف العميل.

إذا كنت بصدد إنشاء معرِّف عميل جديد، اختَر نوع التطبيق أجهزة تلفزيون وأجهزة إدخال محدودة.

الحصول على رمز مستخدم وعنوان URL للتحقق

بعد أن يطلب أحد المستخدمين تسجيل الدخول باستخدام حساب Google، ستحصل على رمز مستخدم وعنوان URL للتحقق عن طريق إرسال طلب HTTP POST إلى نقطة نهاية جهاز OAuth 2.0، وهو https://oauth2.googleapis.com/device/code. وعليك إدراج معرّف العميل وقائمة بالنطاقات التي تحتاجها في الطلب. إذا كنت تريد فقط تسجيل دخول المستخدمين باستخدام حساباتهم على Google، اطلب فقط النطاقين profile وemail، أو إذا كنت تريد طلب إذن لطلب واجهة برمجة تطبيقات متوافقة نيابةً عن المستخدمين، اطلب النطاقات المطلوبة بالإضافة إلى نطاقَي profile وemail.

في ما يلي مثال على طلب رمز مستخدم:

POST /device/code HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=CLIENT_ID&scope=email%20profile

باستخدام curl:

curl -d "client_id=CLIENT_ID&scope=email profile" https://oauth2.googleapis.com/device/code

يتم عرض الاستجابة ككائن JSON:

{
  "device_code" : "4/4-GMMhmHCXhWEzkobqIHGG_EnNYYsAkukHspeYUk9E8",
  "user_code" : "GQVQ-JKEC",
  "verification_url" : "https://www.google.com/device",
  "expires_in" : 1800,
  "interval" : 5
}

يعرض التطبيق قيمتَي user_code وverification_url للمستخدم، وفي الوقت نفسه، يشير إلى نقطة نهاية تسجيل الدخول عند النقطة interval المحدّدة إلى أن يسجِّل المستخدم دخوله أو مرور الوقت المُحدَّد من خلال expires_in.

عرض رمز المستخدم وعنوان URL للتحقق

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

تخضع قيم verification_url وuser_code للتغيير. صمِّم واجهة مستخدم بطريقة يمكنها التعامل مع الحدود التالية:

  • يجب عرض user_code في حقل عريض بما يكفي للتعامل مع 15 حرفًا بحجم W.
  • يجب عرض verification_url في حقل عريض بما يكفي للتعامل مع سلسلة عنوان URL يبلغ طولها 40 حرفًا.

ويمكن أن تحتوي كلتا السلسلة على أي حرف يمكن طباعته من مجموعة حروف US-ASCII.

عند عرض السلسلة user_code، يجب عدم تعديل السلسلة بأي شكل من الأشكال (مثل تغيير حالة الأحرف أو إدراج أحرف تنسيق أخرى)، لأن قد يتعطّل تطبيقك إذا تغيّر تنسيق الرمز في المستقبل.

ويمكنك تعديل سلسلة verification_url عن طريق إزالة المخطط من عنوان URL لأغراض العرض إذا اخترت ذلك. وعند التأكد من ذلك، تأكد من قدرة تطبيقك على التعامل مع الصيغ المختلفة لا تعدِّل سلسلة verification_url بطريقة أخرى.

عندما ينتقل المستخدم إلى عنوان URL لإثبات الملكية، ستظهر له صفحة مشابهة لما يلي:

ربط جهاز من خلال إدخال رمز

بعد أن يُدخل المستخدم رمز المستخدم، يعرض الموقع الإلكتروني لتسجيل الدخول بحساب Google شاشة موافقة تشبه ما يلي:

مثال على شاشة طلب الموافقة لبرنامج عميل

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

الحصول على رمز مميز للمعرّف وإعادة تحميل الرمز المميز

بعد أن يعرض التطبيق رمز المستخدم وعنوان URL للتحقق، ابدأ في استطلاع نقطة نهاية الرمز المميز (https://oauth2.googleapis.com/token) باستخدام رمز الجهاز الذي تلقيته من نقطة نهاية الجهاز. يمكنك استطلاع نقطة نهاية الرمز المميز في الفاصل الزمني، بالثواني، الذي تحدّده القيمة interval.

في ما يلي مثال على الطلب:

POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=CLIENT_ID&client_secret=CLIENT_SECRET&code=DEVICE_CODE&grant_type=http://oauth.net/grant_type/device/1.0

باستخدام curl:

curl -d "client_id=CLIENT_ID&client_secret=CLIENT_SECRET&code=DEVICE_CODE&grant_type=http://oauth.net/grant_type/device/1.0" https://oauth2.googleapis.com/token

إذا لم يوافق المستخدم على الطلب حتى الآن، إليك الرد:

{
  "error" : "authorization_pending"
}

يجب أن يكرِّر تطبيقك هذه الطلبات بمعدَّل لا يتجاوز قيمة interval. إذا تم إجراء استطلاع رأي لتطبيقك سريعًا جدًا، إليك الرد:

{
  "error" : "slow_down"
}

بعد أن يسجِّل المستخدم دخوله ويمنح تطبيقك إمكانية الوصول إلى النطاقات التي طلبتها، ستتضمن الاستجابة لطلب تطبيقك التالي رمزًا مميزًا للمعرّف ورمزًا للدخول ورمزًا مميزًا لإعادة التحميل:

{
  "access_token" : "ya29.AHES6ZSuY8f6WFLswSv0HZLP2J4cCvFSj-8GiZM0Pr6cgXU",
  "token_type" : "Bearer",
  "expires_in" : 3600,
  "refresh_token" : "1/551G1yXUqgkDGnkfFk6ZbjMMMDIMxo3JFc8lY8CAR-Q",
  "id_token": "eyJhbGciOiJSUzI..."
}

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

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

الحصول على معلومات الملف الشخصي للمستخدم من الرمز المميز للمعرّف

يمكنك الحصول على معلومات الملف الشخصي عن المستخدم الذي سجّل الدخول من خلال فك ترميز الرمز المميّز باستخدام أي مكتبة لفك ترميز JWT. على سبيل المثال، باستخدام مكتبة j0 jwt-decode JavaScript

var user_profile = jwt_decode(id_token);

// The "sub" field is available on all ID tokens. This value is unique for each
// Google account and can be used to identify the user. (But do not send this
// value to your server; instead, send the whole ID token so its authenticity
// can be verified.)
var user_id = user_profile["sub"];

// These values are available when you request the "profile" and "email" scopes.
var user_email = user_profile["email"];
var email_verified = user_profile["email_verified"];
var user_name = user_profile["name"];
var user_photo_url = user_profile["picture"];
var user_given_name = user_profile["given_name"];
var user_family_name = user_profile["family_name"];
var user_locale = user_profile["locale"];

مزيد من المعلومات