Ini sebenarnya bukan pertanyaan tetapi panduan tentang cara membuat permintaan terotentikasi ke Wordpress API menggunakan JWT. Saya menulis ini sebagai pengingat bagi diri saya dan bagi mereka yang mungkin membutuhkan bantuan dengan topik yang sama.
Ini sebenarnya bukan pertanyaan tetapi panduan tentang cara membuat permintaan terotentikasi ke Wordpress API menggunakan JWT. Saya menulis ini sebagai pengingat bagi diri saya dan bagi mereka yang mungkin membutuhkan bantuan dengan topik yang sama.
Jawaban:
Mengapa otentikasi JWT
Saya sedang membangun situs yang menggunakan Wordpress sebagai back-end, dan aplikasi React + Redux sebagai front-end, jadi saya menarik semua konten di front-end dengan membuat permintaan ke Wordpress API. Beberapa permintaan (terutama, permintaan POST) harus diautentikasi, yaitu ketika saya menemukan JWT.
Apa yang kita butuhkan
Untuk menggunakan otentikasi JWT dengan Wordpress, pertama-tama kita harus menginstal JWT Authentication untuk plugin WP REST API . Seperti yang dijelaskan dalam instruksi plugin, kita juga perlu memodifikasi beberapa file inti Wordpress. Khususnya:
Dalam file .htaccess yang termasuk dalam folder root instalasi Wordpress, kita perlu menambahkan baris berikut:
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
Dalam file wp-config.php, juga termasuk dalam folder root instalasi Wordpress, kita perlu menambahkan baris-baris ini:
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);
Pengujian untuk melihat apakah JWT tersedia
Untuk memverifikasi bahwa kita sekarang dapat menggunakan JWT, jalankan Postman dan buat permintaan ke 'indeks' default API Wordpress:
http://example.com/wp-json/
Beberapa titik akhir baru, seperti /jwt-auth/v1
dan /jwt-auth/v1/token
seharusnya ditambahkan ke API. Jika Anda dapat menemukannya dalam menanggapi permintaan di atas, itu berarti JWT sekarang tersedia.
Mendapatkan token JWT
Mari kita tetap di Postman untuk saat ini, dan mari kita minta token ke Wordpress API:
http://example.com/wp-json/jwt-auth/v1/token
Respons akan berisi token JWT, yang merupakan kunci terenkripsi yang terlihat seperti ini:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODg4OFwvZm90b3Jvb20tbmV4dCIsImlhdCI6MTUyMjU5NzQ1MiwibmJmIjoxNTIyNTk3NDUyLCJleHAiOjE1MjMyMDIyNTIsImRhdGEiOnsidXNlciI6eyJpZCI6IjEifX19.hxaaT9iowAX1Xf8RUM42OwbP7QgRNxux8eTtKhWvEUM
Membuat permintaan yang diautentikasi
Mari kita coba mengubah judul posting dengan ID 300 sebagai contoh permintaan terotentikasi dengan JWT.
Di tukang pos, pilih POST sebagai metode dan ketik titik akhir berikut:
http://example.com/wp-json/wp/v2/posts/300
Pilih Tanpa Auth di tab Otorisasi, dan tambahkan berikut ini di tab Header:
'Content-type': 'application/json',
'Authorization': 'Bearer jwtToken' // Replace jwtToken with the actual token (the encrypted key above)
Akhirnya, pada tab Tubuh, pilih opsi mentah dan JSON (aplikasi / json), lalu di editor tepat di bawah opsi ketik yang berikut ini:
{ "title": "YES! Authenticated requests with JWT work" }
Sekarang Anda dapat menekan KIRIM. Lihat di tab respons dengan semua data tentang pos yang kami minta: nilai untuk kunci judul seharusnya sekarangYES! Authenticated requests with JWT work
register_rest_route( 'jwt-auth/v1', 'your_custom_endpoint ...
. Apa pun yang berada di bawah / jwt-auth / perlu otorisasi
Melengkapi jawaban @ grazianodev, ini adalah bagaimana Anda mendapatkan token otorisasi Anda menggunakan 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;
}
Setelah itu, kirim permintaan Anda dengan tajuk: "Otorisasi: Bearer $ token"
Di mana $ token adalah token yang dikembalikan oleh fungsi getToken () di atas.
Saya pribadi menggunakan plugin " Nonaktifkan REST API dan Membutuhkan JWT / OAuth Authentication " untuk membatasi akses API hanya dengan token di atas.