كيفية إعداد واستخدام WordPress REST API: المصادقة الأساسية
نشرت: 2020-02-26
في الإصدارات السابقة من هذه السلسلة ، قمت بتغطية مقدمة WordPress REST API و Fetch Posts في WordPress REST API.
في هذه الدفعة من السلسلة على WordPress REST API ، سأناقش كيفية إعداد بروتوكول (بروتوكولات) المصادقة الأساسية على الخادم بحيث يمكن إعداد REST API والحفاظ على اتصال آمن مع مختلف الكيانات والقنوات.
- ما هي المصادقة؟
- المصادقة مع WordPress REST API
- المصادقة الأساسية
- كيف تعمل المصادقة الأساسية؟
- قم بتثبيت البرنامج المساعد WordPress REST API
- إرسال الطلبات المصدق عليها باستخدام ساعي البريد
- إرسال طلبات مصدق عليها باستخدام JavaScript
- إرسال الطلبات المصدق عليها باستخدام WordPress HTTP API
- مصادقة ملفات تعريف الارتباط
ومع ذلك ، سأبدأ هذا البرنامج التعليمي ببعض المناقشات النظرية حول تعريف المصادقة.
ما هي المصادقة؟
في سياق تكنولوجيا المعلومات والاتصالات (ICT) ، المصادقة هي فكرة وعملية التحقق من أوراق اعتماد الشخص أو الكيان الذي يطلب الوصول إلى نظام معين.
من المهم أن نفهم أن المصادقة تختلف عن التخويل. عندما تتم مصادقة شخص ما على خادم استضافة ويب WordPress معين ، يتم منحه وصولاً عامًا إلى النظام. في المقابل ، عندما يكون الشخص مرخصًا ، يكون قادرًا على الوصول إلى موارد جزء أو كاملة من النظام واستخدامها. بمعنى آخر ، تؤكد المصادقة الهوية بينما يحدد التفويض ويمنح الوصول إلى موارد النظام.
في سياق خاص بواجهة برمجة تطبيقات WordPress REST ، يمكن للمستخدم المصادق عليه تنفيذ مهام CRUD. ومع ذلك ، يجب على المستخدم إثبات امتيازات المصادقة الخاصة به في كل خطوة.
المصادقة مع WordPress REST API
تقدم WordPress REST API عدة خيارات للمصادقة ، كل منها مخصص لغرض معين.
- المصادقة الأساسية
- مصادقة OAuth
- مصادقة ملفات تعريف الارتباط
في الوقت الحالي ، فإن طريقة مصادقة WordPress الأصلية للمستخدمين وأنشطتهم هي التحقق من خلال ملفات تعريف الارتباط.
لاستخدام مصادقة OAuth والمصادقة الأساسية مع WordPress REST API ، تحتاج إلى تثبيت المكونات الإضافية المحددة المتوفرة في مجموعة واجهة برمجة تطبيقات GitHub WordPress REST. آمل أن تتلقى هاتان الطريقتان دعمًا محليًا في الإصدارات التالية من WordPress REST API.
المصادقة الأساسية
تشير المصادقة الأساسية إلى النوع الأساسي لمصادقة HTTP حيث يتم إرسال بيانات اعتماد تسجيل الدخول مع رؤوس الطلب.
كيف تعمل المصادقة الأساسية؟
في المصادقة الأساسية ، يطلب العميل URL يتطلب التحقق. الخادم ، بدوره ، يطلب من العميل تعريف نفسه عن طريق إرسال رمز 401 غير مصرح به. ردًا على ذلك ، يرسل العميل نفس الطلب مع بيانات الاعتماد (في اسم المستخدم: زوج كلمة المرور) ملحقة بسلسلة base64 المشفرة. يتم إرسال هذه السلسلة في حقل رأس التفويض على النحو التالي:
التفويض: أساسي b3dhaXMuYWxhbUBjbG91ZHdheXMuY29tOmVKNWtuU24zNVc =
نظرًا لأنه يمكن فك تشفير سلاسل base64 دون بذل الكثير من الجهد ، فإن طريقة المصادقة هذه ليست آمنة جدًا. وبالتالي ، يجب استخدام هذه الأساليب فقط في السيناريوهات حيث توجد ثقة مطلقة بين الخادم والعميل. تطبيق مهم آخر لهذه الطريقة هو استكشاف الأخطاء وإصلاحها داخل نظام آمن.
تجربة استضافة ووردبريس بدون قيود
انقله إلى Cloudways باستخدام البرنامج الإضافي المجاني للهجرة
قم بتثبيت البرنامج المساعد WordPress REST API
يتيح لك المكون الإضافي WordPress REST API إضافة المصادقة الأساسية إلى موقع WordPress.
ملاحظة: " بدون طبقة المقابس الآمنة ، نوصي بشدة باستخدام معالج مصادقة OAuth 1.0a في بيئات الإنتاج ".
البرنامج المساعد WordPress REST API متاح من مجموعة واجهة برمجة تطبيقات GitHub WordPress REST. لاستخدام المكون الإضافي ، ما عليك سوى استنساخه في دليل WordPress Plugin وتنشيطه من خلال مسؤول WordPress.
إرسال الطلبات المصدق عليها باستخدام ساعي البريد
لبدء إرسال طلبات المصادقة ، قم بتثبيت ملحق Postman Chrome. يجعل تطوير API أسهل وأسرع وأكثر ذكاءً وأفضل. بالنسبة لمستخدمي Firefox ، قم بتثبيت REST Easy Add-On الذي يوفر عميل REST كامل الميزات في المتصفح.
مثل معظم عملاء HTTP ، يدعم Postman for Chrome إرسال الطلبات باستخدام طريقة المصادقة الأساسية أصلاً.
لإرسال طلب مصدق عليه ، انتقل إلى علامة التبويب " التفويض" أسفل شريط العناوين:

حدد الآن المصادقة الأساسية من القائمة المنسدلة. سيُطلب منك إدخال اسم المستخدم وكلمة المرور الخاصين بك. بعد ذلك ، انقر فوق زر طلب التحديث .

بعد تحديث خيار المصادقة ، سترى تغييرًا في علامة التبويب الرؤوس . ستتضمن علامة التبويب الآن حقل رأس لسلسلة اسم المستخدم / كلمة المرور المشفرة:

اكتمل الآن إعداد المصادقة الأساسية مع Postman. الآن ، أرسل طلب اختبار (حاول حذف منشور) والذي يتطلب المصادقة:
على سبيل المثال - حذف http://wordpressmu-19393-42425-140587.cloudwaysapps.com/wp-json/wp/v2/posts/50
حيث يمكن استبدال wordpressmu-19393-42425-140587.cloudwaysapps.com بمسار خادم التطوير الخاص بك.
إذا سارت الأمور على ما يرام ، فسيرجع الخادم حالة 200 موافق ، مما يشير إلى حذف المنشور بالمعرف 50:

إرسال طلبات مصدق عليها باستخدام JavaScript
JavaScript هي لغة برمجة مفسرة عالية المستوى ولهذا السبب في هذه الأيام ، يمكن العثور على JavaScript في كل مكان تقريبًا. وبالتالي ، من الشائع جدًا رؤية أطر JavaScript الشائعة تتفاعل مع WordPress. السيناريو الشائع هو استخدام jQuery الذي يتفاعل مع WordPress API. في مثل هذه الحالات ، يمكن لرؤوس التفويض إرسال طلب AJAX.
ضع في اعتبارك طلب الحذف التالي المرسل من خلال طريقة jQuery.ajax ():
jQuery.ajax ({
url: 'http://wordpressmu-19393-42425-140587.cloudwaysapps.com/wp-json/wp/v2/posts/50'،
الطريقة: "حذف" ،
crossDomain: صحيح ،
قبل الإرسال: الوظيفة (xhr) {
xhr.setRequestHeader ('Authorization'، 'Basic' + Base64.encode ('اسم المستخدم: كلمة المرور')) ؛
} ،
Success: function (data، txtStatus، xhr) {
console.log (البيانات) ؛
console.log (xhr.status) ؛
}
}) ؛حيث Base64 هو كائن يستخدم لترميز وفك تشفير سلسلة base64. يتم تعريف هذا على النحو التالي ، أعلى استدعاء طريقة jQuery.ajax ():

var Base64 = {_ keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + / ="، encode: function (e) {var t = ""؛ var n، r، i، s، o، u، a8_ f64 = 0؛ (e) ؛ while (f <e.length) {n = e.charCodeAt (f ++) ؛ r = e.charCodeAt (f ++) ؛ i = e.charCodeAt (f ++) ؛ s = n >> 2 ؛ o = ( n & 3) << 4 | r >> 4 ؛ u = (r & 15) << 2 | i >> 6 ؛ a = i & 63 ؛ if (isNaN (r)) {u = a = 64} وإلا إذا (isNaN (i) ) {a = 64} t = t + this._keyStr.charAt (s) + this._keyStr.charAt (o) + this._keyStr.charAt (u) + this._keyStr.charAt (a)} return t} ، فك: الوظيفة (e) {var t = ""؛ var n، r، i؛ var s، o، u، a؛ var f = 0؛ e = e.replace (/ [^ A-Za-z0-9 \ + \ / \ =] / g، "")؛ while (f <e.length) {s = this._keyStr.indexOf (e.charAt (f ++))؛ o = this._keyStr.indexOf (e.charAt (f ++)) ؛ u = this._keyStr.indexOf (e.charAt (f ++)) ؛ a = this._keyStr.indexOf (e.charAt (f ++)) ؛ n = s << 2 | o >> 4 ؛ r = (o & 15) << 4 | u >> 2 ؛ i = (u & 3) << 6 | a ؛ t = t + String.fromCharCode (n) ؛ إذا (u! = 64) {t = t + String.fromCharCode (r)} إذا (a! = 64) {t = t + String.fromCharCode (i)}} t = Base64._utf8_decode (t) ؛ إرجاع t} ، _ utf8_encode: function (e) {e = e.replace ( / \ r \ n / g، "\ n")؛ var t = ""؛ لـ (var n = 0؛ n <e.length؛ n ++) {var r = e.charCodeAt (n)؛ if (r <128) {t + = String.fromCharCode (r)} else if (r> 127 && r <2048) {t + = String.fromCharCode (r >> 6 | 192)؛ t + = String.fromCharCode (r & 63 | 128)} else { t + = String.fromCharCode (r >> 12 | 224) ؛ t + = String.fromCharCode (r >> 6 & 63 | 128) ؛ t + = String.fromCharCode (r & 63 | 128)}} إرجاع t} ، _ utf8_decode: function (e) {var t = ""؛ var n = 0؛ var r = c1 = c2 = 0؛ while (n <e.length) {r = e.charCodeAt (n)؛ if (r <128) {t + = String. fromCharCode (r)؛ n ++} else if (r> 191 && r <224) {c2 = e.charCodeAt (n + 1)؛ t + = String.fromCharCode ((r & 31) << 6 | c2 & 63)؛ n + = 2} else { c2 = e.charCodeAt (n + 1) ؛ c3 = e.charCodeAt (n + 2) ؛ t + = String.fromCharCode ((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63) ؛ n + = 3}} عودة t}}؛في الطلب أعلاه ، قمت بتعيين رأس التخويل باستخدام setRequestHeader () لكائن xhr الذي تم تمريره كوسيطة إلى طريقة beforeSend () .
بالإضافة إلى الطلب أعلاه ، يجب أن تسمح رؤوس Access-Control-Allow-Headers بحقل التفويض على الخادم. يمكن تمكين ذلك عن طريق إضافة السطر التالي إلى ملف htaccess. ووردبريس:
دائمًا ما يتم تعيين رأس التفويض دائمًا في Access-Control-Allow-Headers Authorers Header
الطلب أعلاه ، عند اكتماله ، سيعيد صدى الاستجابة في وحدة تحكم المتصفح
![]()
يوضح رمز استجابة الحالة 200 الذي تم إرجاعه بواسطة الخادم أنه تم حذف المنشور الذي يحتوي على معرف 52 بنجاح.
إرسال الطلبات المصدق عليها باستخدام WordPress HTTP API
في حالة عدم اتصالك عن بُعد بموقع ويب WordPress آخر ، فإن الطريقة الأنسب هي إرسال طلبات HTTP عبر واجهة برمجة تطبيقات WordPress HTTP.
ضع في اعتبارك الكود التالي الذي يرسل طلب DELETE إلى تثبيت WordPress آخر باستخدام WordPress REST API وتمكين المصادقة الأساسية:
$ wp_request_headers = مصفوفة (
"التخويل" => "أساسي". base64_encode ("اسم المستخدم: كلمة المرور")
) ؛
$ wp_request_url = 'http://wordpressmu-19393-42425-140587.cloudwaysapps.com/wordpress-api/wp-json/wp/v2/posts/50' ؛
$ wp_delete_post_response = wp_remote_request (
wp_request_url دولار ،
مجموعة مصفوفة(
"الطريقة" => "حذف" ،
"headers" => $ wp_request_headers
)
) ؛
صدى wp_remote_retrieve_response_code ($ wp_delete_post_response). ". wp_remote_retrieve_response_message ($ wp_delete_post_response) ؛
هنا ، لقد استخدمت wp_remote_request () الذي يقبل وسيطين ؛ $ url (عنوان URL للطلب) و $ args (المصفوفة التي تحتوي على متغيرات إضافية ليتم تمريرها).
الطريقة $ المعرفة في مصفوفة $ args هي DELETE. تحتوي المصفوفة $ headers على جميع حقول الرأس التي سيتم تمريرها مع الطلب. لقد مررت مفتاح التفويض بسلسلة مفاتيح اسم مستخدم وكلمة مرور مشفرة باستخدام base64.
سيتم حفظ الاستجابة في المتغير $ wp_delete_post_response ، والذي يمكن استخدامه مع الدالتين wp_remote_retrieve_response_code () و wp_remote_retrieve_response_message () . هاتان الوظيفتان هما وظيفتان مساعدتان في WordPress HTTP API ، وهما يستخرجان رمز الحالة ورسالة الحالة من الاستجابة على التوالي.
إذا تم حذف المنشور بنجاح من خلال الطلب أعلاه ، فسيتم تكرار النص التالي:
200 جيد
مصادقة ملفات تعريف الارتباط
مصادقة ملفات تعريف الارتباط هي طريقة المصادقة الأساسية المتوفرة في WordPress. في وقت تسجيل الدخول الناجح إلى لوحة معلومات WordPress ، يتم إعداد ملفات تعريف الارتباط الصحيحة. وبالتالي ، يتعين على المطورين فقط تسجيل الدخول للمصادقة.
ومع ذلك ، فإن واجهة برمجة تطبيقات REST تتضمن طريقة تسمى nonces للتعامل مع مشكلات CSRF. هذا يضمن أن جميع الأنشطة على الموقع تظل منفصلة. ومع ذلك ، يتطلب هذا أيضًا معالجة دقيقة لواجهة برمجة التطبيقات.
للمطورين الذين يستخدمون العمل كجزء من Javascript API ، يتم الاعتناء بهذا بشكل طبيعي من أجلك. هذا هو النهج المحدد لاستخدام واجهة برمجة التطبيقات للمكونات الإضافية والسمات. يمكن أن تمتد نماذج البيانات المخصصة إلى wp.api.models.Base لضمان إرسال ذلك بشكل صحيح لأي طلبات مخصصة.
يجب أن يجتاز المطورون الذين يجرون مكالمات AJAX يدويًا كل طلب. تستخدم واجهة برمجة التطبيقات nonces مع تعيين النشاط على wp_rest . يمكن بعد ذلك تمريرها إلى واجهة برمجة التطبيقات من خلال معلمة البيانات _wpnonce (إما بيانات POST أو في استعلام طلبات GET) ، أو عن طريق رأس X-WP-Nonce .
ملاحظة: حتى وقت قريب ، كان لدى العديد من البرامج دعم سطحي لطلبات الحذف. على سبيل المثال ، لا تقوم PHP بتحويل نص طلب DELETE إلى superglobal. على هذا النحو ، فإن توفير nonce كرأس هو النهج الأكثر موثوقية في هذا السيناريو.
من المهم أن تتذكر أن استراتيجية التأكيد هذه تعتمد على ملفات تعريف ارتباط WordPress. وهكذا، وهذه الطريقة هي ذات الصلة فقط عندما يستخدم API REST داخل وورد ويتم تسجيل المستخدم الحالي في. وعلاوة على ذلك، يجب أن يكون لدى المستخدم الحالي إذن مناسبة لنشاط يتم تنفيذه.
كمثال ، هذه هي الطريقة التي ينشئ بها عميل JavaScript المدمج nonce:
wp_localize_script ('wp-api'، 'wpApiSettings'، المصفوفة ('root' => esc_url_raw (rest_url ())، 'nonce' => wp_create_nonce ('wp_rest'))) ؛فيما يلي مثال على تعديل عنوان منشور باستخدام jQuery AJAX:
.ajax $ ({
url: wpApiSettings.root + 'wp / v2 / posts / 50'،
الطريقة: "POST" ،
قبل الإرسال: الوظيفة (xhr) {
xhr.setRequestHeader ('X-WP-Nonce' ، wpApiSettings.nonce) ؛
} ،
البيانات:{
"title": "Hello Cloudways"
}
}) تم (الوظيفة (الاستجابة) {
console.log (استجابة) ؛
}) ؛استنتاج
ربما تكون واجهة برمجة تطبيقات WordPress REST هي أشهر واجهة برمجة تطبيقات REST وأكثرها استخدامًا في العالم. إنه متاح لكل من يستخدم WordPress للمتاجر عبر الإنترنت وتطبيقات الويب.
أتمنى أن تكون قد فهمت كل ما كتبته في هذا المقال. إذا كان لا يزال لديك سؤال حول الموضوع أو ترغب في المساهمة في المناقشة ، فالرجاء ترك تعليق أدناه.
