رموز الوصول

عندما يتصل شخص ما بتطبيق باستخدام تسجيل دخول فيسبوك، سيتمكن التطبيق من الحصول على رمز وصول يوفر صلاحية وصول مؤقتة وآمنة إلى واجهات API لفيسبوك.

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

نوع رمز الوصول الوصف

رمز وصول المستخدم

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

رمز وصول التطبيق

هذا النوع من رموز الوصول مطلوب لتعديل وقراءة إعدادات التطبيق. كما يمكن استخدامه لنشر إجراءات Open Graph. ويتم إنشاؤه باستخدام مفتاح سري متفق عليه مسبقًا بين التطبيق وفيسبوك، ثم يتم استخدامه خلال الاستدعاءات التي تغيّر الإعدادات على مستوى التطبيق. وإنك تحصل على رموز وصول تطبيق عبر استدعاء من خادم إلى خادم.

رمز وصول الصفحة

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

رمز العميل

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

إنشاء رموز الوصول

- رموز وصول المستخدم

رموز وصول التطبيق

- رموز وصول الصفحة


رموز وصول المستخدم

بالرغم من أن كل منصة تقوم بإنشاء رموز وصول عبر واجهات API مختلفة، فإن كل المنصات تتبع الإستراتيجية الأساسية للحصول على رمز مستخدم:

وتمتلك مختلف المنصات طرقًا مختلفة لبدء هذه العملية وتتضمن الوظائف الخاصة بإدارة رموز الوصول نيابةً عن المطور والشخص مانح الأذونات:

Javascript

تحصل Facebook SDK للغة JavaScript على رموز وصول المستخدم وتخزنها تلقائيًا في ملفات تعريف الارتباط بالمتصفح. يمكنك استرداد رمز وصول المستخدم بإجراء استدعاء إلى FB.getAuthResponse حيث توجد خاصية accessToken وذلك ضمن الاستجابة.

Android

تقوم مجموعات Facebook SDK لنظام التشغيل Android تلقائيًا بإدارة رموز وصول المستخدم عبر الفئة com.facebook.AccessToken. يمكنك معرفة المزيد حول الحصول على رمز وصول المستخدم بتنفيذ تسجيل دخول فيسبوك لنظام التشغيل Android. ويمكنك استرداد رمز وصول المستخدم بفحص Session.getCurrentAccessToken.

نظام التشغيل iOS

تقوم مجموعات Facebook SDK لنظام iOS تلقائيًا بإدارة رموز وصول المستخدم عبر الفئة FBSDKAccessToken. يمكنك معرفة المزيد حول الحصول على رمز وصول المستخدم بتنفيذ تسجيل دخول فيسبوك لنظام iOS. ويمكنك استرداد رمز الوصول بفحص FBSDKAccessToken.currentAccessToken.

الويب (دون JavaScript)

عند إنشاء تطبيق على الويب دون استخدام Facebook SDK للغة Javascript، يتطلب الأمر إنشاء رمز وصول أثناء تنفيذ الخطوات الموضحة في هذا المستند.

نماذج الرموز البرمجية

Android

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(this.getApplicationContext());
    accessToken = AccessToken.getCurrentAccessToken();
}

نظام التشغيل iOS

- (void)viewDidLoad
{
  [super viewDidLoad];
  NSString *accessToken = [FBSDKAccessToken currentAccessToken];
}

JavaScript (الويب)

FB.getLoginStatus(function(response) {
  if (response.status === 'connected') {
    var accessToken = response.authResponse.accessToken;
  } 
} );

الرموز قصيرة الأمد وطويلة الأمد

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

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

تحصل تطبيقات الهواتف المحمولة التي تستخدم SDK لأنظمة iOS وAndroid على فيسبوك على رموز طويلة الأمد افتراضيًا.

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

الرموز متنقلة

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

يجب أن يتم نقل الرموز بين العميل والخادم على نحو آمن عبر HTTPS لضمان أمان حسابات الأشخاص. اقرأ المزيد عن آثار نقل الرموز بين الوحدات العميلة وخادمك.

رموز وصول التطبيق

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

الحدود

لا تظهر دومًا بعض بيانات المستخدم من خلال رمز وصول التطبيق، والتي عادةً ما تكون مرئية للتطبيق الذي يرسل طلبًا برمز وصول تطبيق. إذا كنت تقرأ بيانات المستخدم وتستخدمها في تطبيقك، يجب استخدام رمز وصول مستخدم بدلاً من رمز وصول تطبيق.

وتُعد رموز وصول التطبيق غير آمنة إذا تم تعيين تطبيقك إلى Native/Desktop في الإعدادات المتقدمة من لوحة معلومات التطبيق وبالتالي لن تعمل مع استدعاءات API، وهذا لأننا نفترض أن تطبيقات الكمبيوتر أو التطبيقات الأصلية مضمن بها مفتاح سري في مكان ما (وبالتالي لا يكون رمز وصول التطبيق المنشأ باستخدام هذا المفتاح السري آمنًا).

إنشاء رمز وصول تطبيق

لإنشاء رمز وصول تطبيق، يجب إجراء استدعاء Graph API:

GET /oauth/access_token
    ?client_id={app-id}
    &client_secret={app-secret}
    &grant_type=client_credentials

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

لاحظ أنه لأن هذا الطلب يستخدم المفتاح السري لتطبيقك، يجب عدم إجراء هذا في رمز برمجي من جانب العميل أو في ملف ثنائي للتطبيق يمكن تفكيكه. من المهم عدم مشاركة المفتاح السري لتطبيقك مطلقًا مع أي شخص. وبالتالي، يجب أن يتم استدعاء API هذا فقط باستخدام رمز برمجي من جانب الخادم.

هناك طريقة أخرى لإجراء استدعاءات إلى Graph API، وهي طريقة لا تتطلب استخدام رمز وصول تطبيق منشأ. يمكنك فقط إدخال معرف تطبيقك والمفتاح السري له كمعلمة access_token عند إجراء استدعاء:

https://graph.facebook.com/endpoint?key=value&access_token=app_id|app_secret

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

رموز وصول الصفحة

يتم استخدام رموز وصول الصفحة في استدعاءات Graph API لإدارة صفحات فيسبوك. لإنشاء رمز وصول صفحة، يجب أن يقوم مسؤول الصفحة بمنح إذن موسع اسمه manage_pages. بمجرد منح هذا الإذن، يمكنك استرداد رمز وصول الصفحة باستخدام رمز وصول مستخدم بالأذونات المطلوبة وطلب Graph API التالي:

GET /me/accounts HTTP/1.1
Host: graph.facebook.com

يؤدي هذا إلى إرجاع قائمة بالصفحات التي يديرها الشخص مع بعض المعلومات الإضافية عن الصفحة (مثل فئة الصفحة والأذونات الممنوحة لمسؤول هذه الصفحة) بالإضافة إلى رمز وصول الصفحة:

{
  "data": [
    {
      "category": "Product/service",
      "name": "Sample Page",
      "access_token": "{access-token}",
      "id": "1234567890",
      "perms": [
        "ADMINISTER",
        "EDIT_PROFILE",
        "CREATE_CONTENT",
        "MODERATE_CONTENT",
        "CREATE_ADS",
        "BASIC_ADMIN"
      ]
    }, 
}

وباستخدام رمز وصول صفحة، يمكنك إجراء استدعاءات واجهة API نيابةً عن الصفحة. على سبيل المثال، يمكنك نشر تحديث حالة في صفحة (بدلاً من أن يتم ذلك على يوميات المستخدم) أو قراءة بيانات رؤى الصفحة.

وتعتبر رموز وصول الصفحة فريدة بالنسبة إلى كل صفحة ومسؤول وتطبيق.

يمتلك مسؤولو الصفحة أدوارًا مختلفة، وهو ما يشار إليه بمصفوفة perms التي يتم إرجاعها، كما هو موضح أعلاه. تحدد الوظائف المتاحة للمسؤولين استنادًا إلى قيم perms، والموضحة في قسم الرموز والأدوار.