कैसे करें: वर्डप्रेस एपीआई में जेडब्ल्यूटी-प्रमाणित अनुरोध करें


17

यह वास्तव में एक सवाल नहीं है, लेकिन जेडब्ल्यूटी का उपयोग करके वर्डप्रेस एपीआई के लिए प्रामाणिक अनुरोध कैसे करें, इस पर एक गाइड है। मैं इसे एक अनुस्मारक के रूप में लिख रहा हूं और उन लोगों के लिए जिन्हें उसी विषय के साथ कुछ मदद की आवश्यकता हो सकती है।


3
आपको इसे एक प्रश्न के रूप में प्रारूपित करना चाहिए, फिर समाधान को वास्तविक उत्तर के रूप में पोस्ट करना चाहिए। अन्यथा यह एक अनुत्तरित प्रश्न जैसा लगता है।
जैकब पीटी

2
वहाँ भी है यह ठीक गाइड firxworx.com/blog/wordpress/…
आर्मंडो

जवाबों:


19

क्यों JWT प्रमाणीकरण

मैं एक ऐसी साइट बना रहा हूं जो Wordpress को बैक-एंड के रूप में उपयोग करता है, और फ्रंट-एंड के रूप में एक React + Redux ऐप है, इसलिए मैं Wordpress API के लिए अनुरोध करके सभी सामग्री को फ्रंट-एंड में खींच रहा हूं। कुछ अनुरोध (मुख्य रूप से, POST अनुरोध) को प्रमाणित किया जाना चाहिए, जो कि जब मैं JWT में आया था।

हमें क्या चाहिये

वर्डप्रेस के साथ जेडब्ल्यूटी प्रमाणीकरण का उपयोग करने के लिए, हमें सबसे पहले डब्ल्यूपी रीस्ट एपीआई प्लगइन के लिए जेडब्ल्यूटी प्रमाणीकरण स्थापित करना होगा । जैसा कि प्लगइन के निर्देशों में बताया गया है, हमें कुछ कोर वर्डप्रेस फ़ाइलों को संशोधित करने की भी आवश्यकता है। विशेष रूप से:

Wordpress स्थापना के रूट फ़ोल्डर में शामिल .htaccess फ़ाइल में, हमें निम्नलिखित पंक्तियों को जोड़ने की आवश्यकता है:

RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

Wp-config.php फ़ाइल में, वर्डप्रेस इंस्टॉलेशन के रूट फ़ोल्डर में भी शामिल है, हमें इन पंक्तियों को जोड़ने की आवश्यकता है:

define('JWT_AUTH_SECRET_KEY', 'your-top-secret-key'); // Replace 'your-top-secret-key' with an actual secret key.
define('JWT_AUTH_CORS_ENABLE', true);

परीक्षण यह देखने के लिए कि क्या JWT उपलब्ध है

यह सत्यापित करने के लिए कि हम अब JWT का उपयोग कर सकते हैं, पोस्टमैन को फायर कर सकते हैं और Wordpress API के डिफ़ॉल्ट 'इंडेक्स' के लिए अनुरोध कर सकते हैं:

http://example.com/wp-json/

कुछ नए एंडपॉइंट्स, जैसे /jwt-auth/v1और /jwt-auth/v1/tokenएपीआई में जोड़े जाने चाहिए थे। यदि आप उन्हें उपरोक्त अनुरोध के जवाब में पा सकते हैं, तो इसका मतलब है कि JWT अब उपलब्ध है।

JWT टोकन प्राप्त करना

आइए फिलहाल पोस्टमैन में बने रहें, और हम Wordpress API के लिए एक टोकन का अनुरोध करें:

http://example.com/wp-json/jwt-auth/v1/token

प्रतिक्रिया में JWT टोकन होगा, जो एक एन्क्रिप्टेड कुंजी है जो कुछ इस तरह दिखता है:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODg4OFwvZm90b3Jvb20tbmV4dCIsImlhdCI6MTUyMjU5NzQ1MiwibmJmIjoxNTIyNTk3NDUyLCJleHAiOjE1MjMyMDIyNTIsImRhdGEiOnsidXNlciI6eyJpZCI6IjEifX19.hxaaT9iowAX1Xf8RUM42OwbP7QgRNxux8eTtKhWvEUM

प्रमाणित अनुरोध करना

आइए JWT के साथ एक प्रमाणित अनुरोध के उदाहरण के रूप में 300 की आईडी के साथ एक पद का शीर्षक बदलने का प्रयास करें।

पोस्टमैन में, विधि के रूप में POST चुनें और निम्नलिखित समापन बिंदु टाइप करें:

http://example.com/wp-json/wp/v2/posts/300

प्राधिकरण टैब में कोई प्रामाणिक न चुनें, और हेडर टैब में निम्नलिखित जोड़ें:

'Content-type': 'application/json', 
'Authorization': 'Bearer jwtToken' // Replace jwtToken with the actual token (the encrypted key above)

अंत में, बॉडी टैब में, कच्चे और JSON (एप्लिकेशन / json) विकल्पों का चयन करें, फिर विकल्पों के ठीक नीचे संपादक में निम्न प्रकार हैं:

{ "title": "YES! Authenticated requests with JWT work" }

अब आप SEND को हिट कर सकते हैं। पोस्ट के बारे में सभी डेटा के साथ प्रतिक्रिया टैब में देखें जो हमने अनुरोध किया था: शीर्षक कुंजी के लिए मूल्य अब होना चाहिएYES! Authenticated requests with JWT work


2
आप उन कॉल के बीच अंतर कैसे करेंगे जिन्हें प्रमाणित किया जाना चाहिए और जैसे कि बैक-एंड में प्रमाणित नहीं होना चाहिए?
उरुक

मैं एक रिएक्ट ऐप भी बना रहा हूँ जो वर्डप्रेस डेटाबेस से वर्डप्रेस रीस्ट एपीआई का उपयोग करके डेटा पोस्ट करता है, हालाँकि, मैं नहीं चाहता कि रीस्ट एपीआई एंडपॉइंट सार्वजनिक रूप से उपलब्ध हो। क्या मेरे रिएक्ट ऐप के अलावा REST एपीआई तक पहुंच को प्रतिबंधित करने का कोई तरीका है?
क्रिस

@chris यदि आप चाहते हैं कि आपके समापन बिंदु गैर-अधिकृत अनुरोधों से दूर छिपे हों, तो उन्हें नामस्थान jwt_auth के अंतर्गत जोड़ें, जैसे register_rest_route( 'jwt-auth/v1', 'your_custom_endpoint ... :। के तहत कुछ भी /
jwt

4

@ Grazianodev के उत्तर को लागू करते हुए, यह है कि आप अपने प्राधिकरण टोकन को cURL का उपयोग करके कैसे प्राप्त करें:

/**
*   Generate a JWT token for future API calls to WordPress
*/
private function getToken() {
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL,'https://site.localhost/wp-json/jwt-auth/v1/token');
    curl_setopt($ch, CURLOPT_POST, 1);

    # Admin credentials here
    curl_setopt($ch, CURLOPT_POSTFIELDS, "username=admin&password=Str0ngPass"); 

    // receive server response ...
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $server_output = curl_exec ($ch);
    if ($server_output === false) {
        die('Error getting JWT token on WordPress for API integration.');
    }
    $server_output = json_decode($server_output);

    if ($server_output === null && json_last_error() !== JSON_ERROR_NONE) {
        die('Invalid response getting JWT token on WordPress for API integration.');
    }

    if (!empty($server_output->token)) {
        $this->token = $server_output->token; # Token is here
        curl_close ($ch);
        return true;
    } else {
        die('Invalid response getting JWT token on WordPress for API integration.');
    }
    return false;
}

उसके बाद, हेडर के साथ अपने अनुरोध भेजें: "प्राधिकरण: बियरर $ टोकन"

जहाँ $ टोकन टोकन हो (टोकन) उपरोक्त फ़ंक्शन द्वारा लौटाया गया है।

मैं व्यक्तिगत रूप से केवल ऊपर टोकन के साथ एपीआई एक्सेस को प्रतिबंधित करने के लिए प्लग इन का उपयोग करता हूं " REST API को अक्षम करें और JWT / OAuth ऑथेंटिकेशन की आवश्यकता है "।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.