بالنسبة لتسجيل الدخول المستند إلى المتصفح لتطبيق الويب أو أجهزة الكمبيوتر دون استخدام مجموعات SDK التي نوفرها، مثل طريقة عرض الويب لتطبيق أجهزة الكمبيوتر الأصلي (على سبيل المثال Windows 8)، أو دفق تسجيل الدخول باستخدام رمز من جانب الخادم بالكامل، يمكنك إنشاء دفق تسجيل دخول لنفسك باستخدام عمليات إعادة توجيه المتصفح. وسيُعرفك هذا الدليل على كل خطوة من خطوات دفق تسجيل الدخول ويعرض لك كيفية تنفيذ كل خطوة بدون استخدام مجموعات SDK:
لاستخدام تسجيل دخول فيسبوك في تطبيق أجهزة الكمبيوتر، يجب أن تتمكن من تضمين متصفح الويب (وأحيانًا يُسمى عرض الويب) في التطبيق لتنفيذ عملية تسجيل الدخول.
يمكن للتطبيقات التي تستخدم مجموعات SDK أن تتحقق مما إذا كان شخص ما قد سجل الدخول بالفعل باستخدام الوظائف المدمجة. ويجب على كل التطبيقات الأخرى إنشاء طريقتها الخاصة في تخزين موعد تسجيل دخول أي شخص وعندما لا يكون ذلك المؤشر متوفرًا، تابع على افتراض أنه تم تسجيل خروج الشخص. في حالة تسجيل خروج الشخص، ينبغي على تطبيقك إعادة توجيهه إلى مربع حوار تسجيل الدخول في وقت مناسب، على سبيل المثال عند النقر على زر تسجيل الدخول.
وسواء لم يسجل الشخص دخوله إلى تطبيقك أو لم يسجل دخوله إلى Facebook، فيمكنك استخدام مربع الحوار تسجيل الدخول لمطالبته بتسجيل الدخول إلى كليهما. وإذا لم يتم تسجيل دخول هذا الشخص إلى Facebook، فستتم مطالبته بتسجيل الدخول ثم الانتقال إلى تسجيل الدخول إلى تطبيقك. ويتم اكتشاف هذا تلقائيًا، بحيث لا تحتاج إلى فعل أي شيء آخر لتمكين هذا السلوك.
يجب على تطبيقك بدء إعادة التوجيه إلى نقطة نهاية تعرض مربع الحوار تسجيل الدخول:
https://www.facebook.com/v21.0
/dialog/oauth?
client_id={app-id}
&redirect_uri={redirect-uri}
&state={state-param}
تحتوي نقطة النهاية هذه على المعلمات المطلوبة التالية:
client_id
. يمثل معرف التطبيق الموجود في لوحة معلومات تطبيقك.redirect_uri
. يمثل عنوان URL الذي تريد إعادة توجيه الشخص الذي يسجل الدخول إليه مجددًا. وسيسجل عنوان URL هذا الاستجابة من مربع الحوار تسجيل الدخول. إذا كنت تستخدم هذا في عرض الويب داخل تطبيق أجهزة كمبيوتر، فيجب تعيين هذا إلى https://www.facebook.com/connect/login_success.html
. ويمكنك التأكيد على أنه تم تعيين عنوان URL هذا لتطبيقك في "لوحة معلومات التطبيق". ضمن المنتجات في قائمة التنقل بالجانب الأيمن في لوحة معلومات التطبيق، انقر على تسجيل دخول فيسبوك، ثم انقر على الإعدادات. تحقق من صحة محددات URI الصالحة لإعادة توجيه OAuth في القسم إعدادات OAuth للعميل.state
. تمثل قيمة سلسلة منشأة بواسطة تطبيقك للحفاظ على الحالة بين الطلب والاستدعاء. يجب استخدام هذه المعلمة لمنع تزوير الطلب عبر الموقع وسيتم إعادة إرسالها إليك، بدون تغيير، في محدد URI لإعادة التوجيه.على سبيل المثال، إذا كان طلب تسجيل الدخول لديك يبدو كما يلي:
https://www.facebook.com/v21.0
/dialog/oauth?
client_id={app-id}
&redirect_uri={"https://www.domain.com/login"}
&state={"{st=state123abc,ds=123456789}"}
فعندئذ يمكن استدعاء محدد URI لإعادة التوجيه باستخدام ما يلي:
https://www.domain.com/login?state="{st=state123abc,ds=123456789}"
كما يتضمن هذا المعلمات الاختيارية التالية:
response_type
. يحدد ما إذا كانت بيانات الاستجابة مُضمنة عند حدوث إعادة التوجيه مجددًا إلى التطبيق في أجزاء أو معلمات عنوان URL أم لا. راجع القسم تأكيد الهوية لاختيار النوع الذي يجب أن يستخدمه تطبيقك. يمكن أن يكون هذا واحدًا مما يلي:
code
. يتم تضمين بيانات الاستجابة كمعلمات عنوان URL وتحتوي على المعلمة code
(سلسلة مشفّرة فريدة لكل طلب تسجيل دخول). وهذا هو السلوك الافتراضي إذا لم يتم تحديد هذه المعلمة. يكون الأمر مفيدًا للغاية عندما يعالج الخادم الرمز.token
. يتم تضمين بيانات الاستجابة باعتبارها جزءًا من عنوان URL وتحتوي على رمز وصول. ويجب على تطبيقات أجهزة الكمبيوتر استخدام هذا الإعداد من أجل response_type
. يكون هذا الأمر مفيدًا للغاية عندما يعالج العميل الرمز.code%20token
. يتم تضمين بيانات الاستجابة باعتبارها جزءًا من عنوان URL وتحتوي على كل من رمز وصول والمعلمة code
.granted_scopes
. يُرجع قائمة مفصولة بفواصل تضم كل الأذونات الممنوحة للتطبيق بواسطة المستخدم في وقت تسجيل الدخول. ويمكن دمجها مع قيم response_type
الأخرى. عند الدمج مع token
، يتم تضمين بيانات الاستجابة باعتبارها جزءًا من عنوان URL وبخلاف ذلك يتم تضمينها باعتبارها معلمة عنوان URL. scope
. قائمة مفصولة بفاصلة أو مسافة تضم الأذونات التي تحتاج إلى أن تطلبها من الشخص الذي يستخدم تطبيقك.إذا كنت تنشئ تسجيل دخول لتطبيق في نظام Windows، فيمكنك استخدام معرف أمان الحزمة باعتباره معرف redirect_uri
الخاص بك. يمكنك تشغيل مربع الحوار تسجيل الدخول عن طريق استدعاء WebAuthenticationBroker.AuthenticateAsync
واستخدام نقطة نهاية مربع الحوار تسجيل الدخول باعتبارها requestUri. فيما يلي مثال بلغة JavaScript:
var requestUri = new Windows.Foundation.Uri(
"https://www.facebook.com/v21.0
/dialog/oauth?
client_id={app-id}
&display=popup
&response_type=token
&redirect_uri=ms-app://{package-security-identifier}");
Windows.Security.Authentication.Web.WebAuthenticationBroker.authenticateAsync(
options,
requestUri)
.done(function (result) {
// Handle the response from the Login Dialog
}
);
سيؤدي هذا إلى إرجاع تدفق التحكم مجددًا إلى تطبيقك من خلال رمز وصول عند النجاح أو خطأ عند الفشل.
عند هذه المرحلة في تدفق تسجيل الدخول، سيرى الشخص مربع الحوار تسجيل الدخول وسيكون لديه خيار إلغاء وصول التطبيق إلى بياناته أو السماح له.
إذا اختار الشخص الذي يستخدم التطبيق "موافق" في مربع الحوار تسجيل الدخول، فإنه يمنح الوصول إلى ملفه الشخصي العام وقائمة الأصدقاء وأي أذونات إضافية قد طلبها تطبيقك.
في كل الحالات، يعود المتصفح إلى التطبيق ويتم تضمين بيانات الاستجابة التي توضح ما إذا كان الشخص متصلاً أو تم إلغاء اتصاله. عندما يستخدم تطبيقك طريقة إعادة التوجيه كما هو مذكور أعلاه، سيتم إلحاق redirect_uri
الذي يرجعه تطبيقك بأجزاء أو معلمات عنوان URL (وفقًا لـ response_type
المحدد)، الذي يجب تسجيله.
نظرًا للتركيبات المختلفة للغات الرموز البرمجية التي يمكن استخدامها في تطبيقات الويب، لا يعرض الدليل أمثلة محددة. ومع ذلك، يمكن لمعظم اللغات الحديثة تحليل عنوان URL، كما يلي:
يمكن للغة JavaScript من جانب العميل الحصول على أجزاء عنوان URL (على سبيل المثال jQuery BBQ)، بينما يمكن الحصول على معلمات عنوان URL بواسطة كل من الرمز من جانب العميل والرمز من جانب الخادم (على سبيل المثال بلغة $_GET
PHP أو jQuery.deparam
jQuery BBQ أو querystring.parse
Node.js أو urlparse
Python). توفر Microsoft دليلاً وعينة من الرمز لتطبيقات نظام Windows 8 المتصلة بـ "بموفر خدمة عبر الإنترنت"، والذي يكون في هذه الحالة، فيسبوك.
عند استخدام تطبيق أجهزة كمبيوتر وتسجيل الدخول، يعيد فيسبوك توجيه الأشخاص إلى محدد redirect_uri
المذكور أعلاه ويضع رمز وصول بجانب بعض بيانات التعريف الأخرى (مثل وقت انتهاء الرمز) في جزء من محدد URI:
https://www.facebook.com/connect/login_success.html# access_token=ACCESS_TOKEN...
يجب على تطبيقك اكتشاف إعادة التوجيه هذه ومن ثم قراءة رمز الوصول من محدد URI باستخدام الآليات التي يوفرها نظام التشغيل وإطار عمل التطوير الذي تستخدمه. وبعد ذلك، يمكنك التخطي مباشرةً إلى الخطوة فحص رموز الوصول.
إذا لم يقبل الأشخاص الذين يستخدمون تطبيقك مربع الحوار تسجيل الدخول ونقروا على "إلغاء"، فستتم إعادة توجيههم إلى ما يلي:
YOUR_REDIRECT_URI? error_reason=user_denied &error=access_denied &error_description=Permissions+error.
راجع معالجة الأذونات المفقودةلمعرفة المزيد حول ما يجب أن تفعله التطبيقات عندما يرفض الأشخاص تسجيل الدخول.
ونظرًا لأن تدفق إعادة التوجيه هذا يتضمن المتصفحات التي تتم إعادة توجيهها إلى عناوين URL في تطبيقك من مربع الحوار تسجيل الدخول، يمكن للزيارات الوصول مباشرةً إلى عنوان URL هذا باستخدام معلمات أو أجزاء مركبة. إذا افترض تطبيقك أن هذه المعلمات صالحة، فسيستخدم تطبيقك البيانات المركبة لأغراض يحتمل أن تكون ضارة. ونتيجة لذلك، يجب على تطبيقك التأكيد على أن الشخص الذي يستخدم التطبيق هو الشخص نفسه الذي تمتلك بيانات استجابة له قبل إنشاء رمز وصول من أجله. يتم تأكيد الهوية بطرق مختلفة بناءً على response_type
الذي تم تلقيه أعلاه:
code
، يجب استبداله مع رمز وصول باستخدام نقطة نهاية. ويجب أن يكون الاستدعاء من خادم إلى خادم، لأنه يتضمن المفتاح السري لتطبيقك. (يجب عدم إظهار المفتاح السري لتطبيقك في الرمز البرمجي للعميل.)token
، يجب التحقق من صحته. ويجب إجراء استدعاء واجهة API لنقطة نهاية الفحص التي ستوضح لمن تم إنشاء الرمز المميز وبواسطة أي تطبيق. ونظرًا لأن استدعاء واجهة API هذا يتطلب استخدام رمز وصول التطبيق، فلا تقم أبدًا بإجراء هذا الاستدعاء من جانب العميل. وبدلاً من ذلك يمكنك إجراء هذا الاستدعاء من جانب الخادم، حيث يمكنك تخزين المفتاح السري لتطبيقك بأمان.code
وtoken
، يجب تنفيذ كلتا الخطوتين.لاحظ أنه يمكنك أيضًا إنشاء المعلمة state
الخاصة بك واستخدامها مع طلب تسجيل الدخول لديك لتوفير حماية CSRF.
للحصول على رمز وصول، يمكنك إجراء طلب HTTP GET إلى نقطة نهاية OAuth التالية:
GET https://graph.facebook.com/v21.0
/oauth/access_token?
client_id={app-id}
&redirect_uri={redirect-uri}
&client_secret={app-secret}
&code={code-parameter}
تحتوي نقطة النهاية هذه على بعض المعلمات المطلوبة:
client_id
. يمثل معرفات تطبيقكredirect_uri
. هذه الوسيطة مطلوبة ويجب أن تكون مماثلة لمحدد request_uri
الأصلي الذي استخدمته عند بدء عملية تسجيل دخول OAuth.client_secret
. يمثل المفتاح السري لتطبيقك، المعروض في لوحة معلومات التطبيق. وتجنَّب تمامًا تضمين هذا المفتاح السري للتطبيق في أي رمز برمجي من جانب العميل أو في الملفات الثنائية التي يمكن تحويلها برمجيًا. ومن المهم للغاية أن يظل هذا سريًا تمامًا لأنه أساس أمان تطبيقك وكل الأشخاص الذين يستخدمونه.code
. يمثل المعلمة المستلمة من إعادة توجيه مربع الحوار تسجيل الدخول أعلاه.ملاحظة: بدءًا من الإصدار 2.3 وما بعده، ستُرجع نقطة النهاية هذه استجابة JSON مناسبة. وإذا لم يحدد استدعاؤك إصدارًا بعينه، فسيتم تعيينه افتراضيًا على أقدم إصدار متوفر.
الاستجابة
سيتم إرجاع الاستجابة التي ستتلقاها من نقطة النهاية هذه بتنسيق JSON، وفي حالة نجاح العملية، ستكون:
{ "access_token": {access-token}, "token_type": {type}, "expires_in": {seconds-til-expiration} }
إذا لم تنجح، فستتلقى رسالة خطأ توضيحية.
سواء كان تطبيقك يستخدم code
أو token
باعتبارهما response_type
الخاص بك من مربع الحوار تسجيل الدخول أم لا، فسيتلقى رمز وصول. ويمكنك تنفيذ فحوصات مؤتمتة على هذه الرموز باستخدام نقطة نهاية واجهة Graph API:
GET graph.facebook.com/debug_token? input_token={token-to-inspect} &access_token={app-token-or-admin-token}
تتطلب نقطة النهاية هذه المعلمات التالية:
input_token
. يمثل الرمز الذي تحتاج إلى فحصه.access_token
رمز وصول التطبيق أو رمز وصول لمطوّر التطبيق.تمثل استجابة استدعاء واجهة API مصفوفة JSON تحتوي على بيانات عن الرمز الذي تم فحصه. على سبيل المثال:
{ "data": { "app_id": 138483919580948, "type": "USER", "application": "Social Cafe", "expires_at": 1352419328, "is_valid": true, "issued_at": 1347235328, "metadata": { "sso": "iphone-safari" }, "scopes": [ "email", "publish_actions" ], "user_id": "1207059" } }
يساعد الحقلان app_id
وuser_id
تطبيقك على التحقق من صلاحية رمز الوصول للشخص ولتطبيقك. وللاطّلاع على وصف كامل للحقول الأخرى، راجع دليل الحصول على معلومات عن رموز الوصول.
يمكن استدعاء عنصر الربط /me/permissions
لاسترداد قائمة الأذونات التي تم منحها أو رفضها بواسطة مستخدم معين. ويمكن لتطبيقك استخدام هذا للتحقق من الأذونات المطلوبة التي لا يمكن أن يستخدمها التطبيق لأي مستخدم معين.
يتيح تسجيل دخول فيسبوك للأشخاص رفض مشاركة بعض الأذونات مع تطبيقك. ويحتوي مربع حوار تسجيل الدخول على شاشة تبدو على النحو التالي:
عادةً ما يكون الإذن public_profile
مطلوبًا دائمًا وغير نشط لعدم توفر إمكانية تعطيله.
ومع ذلك، إذا حاول شخص ما إلغاء تحديد user_likes
(تسجيلات الإعجاب) في هذا المثال، فإن التحقق من /me/permissions
بحثًا عن الأذونات التي تم منحها سيؤدي إلى:
{ "data": [ { "permission":"public_profile", "status":"granted" }, { "permission":"user_likes", "status":"declined" } ] }
لاحظ أنه تم رفض الإذن user_likes
بدلاً من منحه.
لا توجد مشكلة في أن تطلب مرة أخرى من شخص ما أن يمنحك أذونات التطبيق التي رفضها. وينبغي أن توفر شاشة توضح الأسباب التي تقنع الشخص بمنحك الإذن، وبعد ذلك أعد طلب الإذن. ولكن إذا قمت بإلغاء مربع الحوار تسجيل الدخول كما في السابق، فلن يطلب هذا الإذن.
يرجع هذا إلى أنه بمجرد رفض الشخص للإذن، لا يعيد مربع حوار تسجيل الدخول طلبه، ما لم تخبر مربع الحوار بوضوح بأنك تعيد طلب إذن تم رفضه.
يمكنك إجراء ذلك من خلال إضافة المعلمة auth_type=rerequest
إلى عنوان URL لمربع الحوار تسجيل الدخول لديك:
https://www.facebook.com/v21.0
/dialog/oauth?
client_id={app-id}
&redirect_uri={redirect-uri}
&auth_type=rerequest
scope=email
باستخدام هذا، سيعيد مربع الحوار تسجيل الدخول طلب الإذن المرفوض.
عند هذه المرحلة في التدفق، يتوفر لديك شخص ما قد تمت مصادقته وتسجيل دخوله. وأصبح تطبيقك مستعدًا لإجراء استدعاءات API نيابة عنه. وقبل إجراء ذلك، يجب تخزين رمز الوصول وحالة تسجيل الدخول للشخص الذي يستخدم التطبيق.
بعد حصول تطبيقك على رمز الوصول من الخطوة السابقة، ينبغي تخزين الرمز بحيث يتوفر لكل أجزاء التطبيق عند إجراء استدعاءات API. ولا توجد عملية محددة هنا، لكن بشكل عام إذا كنت تُنشئ تطبيق ويب، فمن الأفضل إضافة الرمز كمتغير جلسة لتحديد جلسة المتصفح هذه مع شخص معين، وإذا كنت تُنشئ تطبيق هاتف محمول أو جهاز كمبيوتر أصلي، فيجب حينها استخدام مخزن البيانات المتوفر لتطبيقك. كما يجب على التطبيق تخزين الرمز في قاعدة البيانات بجانب المعرف user_id
لتحديده.
يرجى الاطّلاع على ملاحظتنا بشأن حجم رموز الوصول في مستند رمز الوصول.
مرة أخرى، ينبغي على تطبيقك تخزين حالة تسجيل دخول الشخص، وهو ما يساعد على تجنب الاضطرار لإجراء استدعاءات إضافية لمربع الحوار تسجيل الدخول. وأيًا كان الإجراء الذي اخترته، قم بتعديل التحقق من حالة تسجيل الدخول لديك لتوضيحه.
يمكنك تسجيل خروج الأشخاص من تطبيقك من خلال إلغاء أي مؤشر حالة تسجيل دخول قمت بإضافته، على سبيل المثال حذف الجلسة التي تشير إلى أن الشخص قد سجل الدخول. كما يجب عليك إزالة رمز الوصول الذي تم تخزينه.
تسجيل خروج شخص ما ليس مماثلاً لإلغاء إذن تسجيل الدخول (إزالة المصادقة الممنوحة مسبقًا)، الذي يمكن تنفيذه بشكل منفصل. لذلك، أنشئ تطبيقك بحيث لا يجبر الأشخاص الذين سجلوا خروجهم على العودة لمربع الحوار تسجيل الدخول تلقائيًا.
يمكن للأشخاص إلغاء تثبيت التطبيقات عبر Facebook.com من دون التفاعل مع التطبيق نفسه. لمساعدة التطبيقات في اكتشاف الأمر عند حدوثه، نسمح لها بتوفير عنوان URL الاستدعاء لإلغاء التصريح الذي سيتم تحديده عند حدوث ذلك.
يمكنك تمكين إلغاء تصريح الاستدعاء عبر لوحة معلومات التطبيق.
يمكن للأشخاص مطالبة أي تطبيق بحذف المعلومات المتعلقة بهم التي تم تلقيها من Facebook. وللاستجابة إلى هذه الطلبات، راجع استدعاء طلب حذف البيانات.