นี่ไม่ใช่คำถาม แต่เป็นแนวทางในการขอการรับรองความถูกต้องกับ Wordpress API โดยใช้ JWT ฉันกำลังเขียนสิ่งนี้เป็นเครื่องเตือนใจฉันและสำหรับผู้ที่อาจต้องการความช่วยเหลือในหัวข้อเดียวกัน
นี่ไม่ใช่คำถาม แต่เป็นแนวทางในการขอการรับรองความถูกต้องกับ Wordpress API โดยใช้ JWT ฉันกำลังเขียนสิ่งนี้เป็นเครื่องเตือนใจฉันและสำหรับผู้ที่อาจต้องการความช่วยเหลือในหัวข้อเดียวกัน
คำตอบ:
ทำไมต้องตรวจสอบ JWT
ฉันกำลังสร้างเว็บไซต์ที่ใช้ Wordpress เป็นแบ็คเอนด์และแอป React + Redux เป็นส่วนหน้าดังนั้นฉันจึงดึงเนื้อหาทั้งหมดในส่วนหน้าโดยการร้องขอไปยัง Wordpress API คำขอบางอย่าง (โดยส่วนใหญ่คำขอ POST) ต้องได้รับการตรวจสอบสิทธิ์ซึ่งก็คือเมื่อฉันเจอ JWT
สิ่งที่เราต้องการ
ในการใช้การพิสูจน์ตัวตน JWT กับ Wordpress อันดับแรกเราต้องติดตั้งJWT Authentication สำหรับปลั๊กอินWP REST API ตามที่อธิบายไว้ในคำแนะนำของปลั๊กอินเรายังจำเป็นต้องแก้ไขไฟล์ corepress บางไฟล์ โดยเฉพาะอย่างยิ่ง:
ในไฟล์. htaccess ที่รวมอยู่ในโฟลเดอร์รูทของการติดตั้ง Wordpress เราจำเป็นต้องเพิ่มบรรทัดต่อไปนี้:
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
ในไฟล์ wp-config.php ซึ่งรวมอยู่ในโฟลเดอร์รูทของการติดตั้ง Wordpress เราต้องเพิ่มบรรทัดเหล่านี้:
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 แล้วให้เปิด Postman และทำการร้องขอ 'ดัชนี' เริ่มต้นของ Wordpress API:
http://example.com/wp-json/
จุดปลายใหม่บางอย่างเช่น/jwt-auth/v1
และ/jwt-auth/v1/token
ควรได้รับการเพิ่มลงใน API หากคุณสามารถค้นหาพวกเขาในการตอบสนองต่อการร้องขอข้างต้นก็หมายความว่าตอนนี้มี JWT
รับโทเค็น JWT
เราอยู่ในบุรุษไปรษณีย์สักพักแล้วขอโทเค็นไปยัง Wordpress API:
http://example.com/wp-json/jwt-auth/v1/token
การตอบสนองจะมีโทเค็น JWT ซึ่งเป็นคีย์เข้ารหัสที่มีลักษณะดังนี้:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODg4OFwvZm90b3Jvb20tbmV4dCIsImlhdCI6MTUyMjU5NzQ1MiwibmJmIjoxNTIyNTk3NDUyLCJleHAiOjE1MjMyMDIyNTIsImRhdGEiOnsidXNlciI6eyJpZCI6IjEifX19.hxaaT9iowAX1Xf8RUM42OwbP7QgRNxux8eTtKhWvEUM
การร้องขอที่มีการรับรองความถูกต้อง
ลองเปลี่ยนชื่อของโพสต์ด้วย ID 300 เป็นตัวอย่างของการร้องขอการรับรองความถูกต้องกับ JWT
ในบุรุษไปรษณีย์เลือก POST เป็นวิธีการและพิมพ์ปลายทางต่อไปนี้:
http://example.com/wp-json/wp/v2/posts/300
เลือก No Auth ในแท็บการอนุญาตและเพิ่มรายการต่อไปนี้ในแท็บส่วนหัว:
'Content-type': 'application/json',
'Authorization': 'Bearer jwtToken' // Replace jwtToken with the actual token (the encrypted key above)
สุดท้ายในแท็บ Body ให้เลือกตัวเลือก raw และ JSON (application / json) จากนั้นในตัวแก้ไขด้านล่างตัวเลือกให้พิมพ์ดังต่อไปนี้:
{ "title": "YES! Authenticated requests with JWT work" }
ตอนนี้คุณสามารถกดปุ่มส่ง ดูในแท็บการตอบกลับพร้อมด้วยข้อมูลทั้งหมดเกี่ยวกับโพสต์ที่เราร้องขอ: ตอนนี้ค่าสำหรับคีย์ชื่อควรเป็นYES! Authenticated requests with JWT work
register_rest_route( 'jwt-auth/v1', 'your_custom_endpoint ...
คือชอบโดย: สิ่งใดภายใต้ / jwt-auth / จะต้องได้รับอนุญาต
การตอบกลับคำตอบของ @ 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;
}
หลังจากนั้นส่งคำขอของคุณด้วยหัวข้อ: "การอนุญาต: Bearer $ token"
โดยที่ $ token เป็นโทเค็นที่ส่งคืนโดยฟังก์ชัน getToken () ด้านบน
ฉันเองใช้ปลั๊กอิน " ปิดใช้งาน REST API และต้องการการรับรองความถูกต้อง JWT / OAuth " เพื่อ จำกัด การเข้าถึง API ด้วยโทเค็นด้านบนเท่านั้น