Bu gerçekten bir soru değil, JWT kullanarak Wordpress API'sına doğrulanmış isteklerin nasıl yapılacağına dair bir rehber. Bunu kendime ve aynı konuda yardıma ihtiyaç duyanlara hatırlatma olarak yazıyorum.
Bu gerçekten bir soru değil, JWT kullanarak Wordpress API'sına doğrulanmış isteklerin nasıl yapılacağına dair bir rehber. Bunu kendime ve aynı konuda yardıma ihtiyaç duyanlara hatırlatma olarak yazıyorum.
Yanıtlar:
Neden JWT kimlik doğrulaması
Arka uç olarak Wordpress ve ön uç olarak React + Redux uygulamasını kullanan bir site inşa ediyorum, bu yüzden Wordpress API'ya istekte bulunarak ön uçtaki tüm içeriği çekiyorum. Bazı isteklerin (çoğunlukla POST istekleri) doğrulanması gerekir, bu da JWT ile karşılaştığım zamandır.
İhtiyacımız olan
Wordpress ile JWT kimlik doğrulamasını kullanmak için, önce WP REST API eklentisi için JWT Kimlik Doğrulamasını yüklememiz gerekir . Eklentinin talimatlarında açıklandığı gibi, bazı temel Wordpress dosyalarını da değiştirmemiz gerekiyor. Özellikle:
Wordpress kurulumunun kök klasöründe bulunan .htaccess dosyasında aşağıdaki satırları eklememiz gerekir:
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
Wordpress kurulumunun kök klasörüne de dahil olan wp-config.php dosyasında şu satırları eklememiz gerekir:
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'nin mevcut olup olmadığını test etme
Artık JWT'yi kullanabileceğimizi doğrulamak için, Postacı'yı ateşleyin ve Wordpress API'sinin varsayılan 'dizinine' bir istekte bulunun:
http://example.com/wp-json/
API'ya benzer /jwt-auth/v1
ve birkaç yeni uç nokta /jwt-auth/v1/token
eklenmiş olmalıdır. Bunları yukarıdaki isteğe yanıt olarak bulabilirseniz, JWT artık kullanılabilir demektir.
JWT jetonunu alma
Şu an Postacı'da kalalım ve Wordpress API'sına bir jeton isteyelim:
http://example.com/wp-json/jwt-auth/v1/token
Yanıt, şuna benzer bir şifreli anahtar olan JWT jetonunu içerecektir:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODg4OFwvZm90b3Jvb20tbmV4dCIsImlhdCI6MTUyMjU5NzQ1MiwibmJmIjoxNTIyNTk3NDUyLCJleHAiOjE1MjMyMDIyNTIsImRhdGEiOnsidXNlciI6eyJpZCI6IjEifX19.hxaaT9iowAX1Xf8RUM42OwbP7QgRNxux8eTtKhWvEUM
Kimliği doğrulanmış bir istekte bulunma
JWT ile kimliği doğrulanmış bir istek örneği olarak 300 numaralı bir yayının başlığını değiştirmeye çalışalım.
Postacı'da yöntem olarak POST'u seçin ve aşağıdaki bitiş noktasını yazın:
http://example.com/wp-json/wp/v2/posts/300
Yetkilendirme sekmesinde Kimlik Doğrulaması Yok'u seçin ve Üstbilgiler sekmesine aşağıdakileri ekleyin:
'Content-type': 'application/json',
'Authorization': 'Bearer jwtToken' // Replace jwtToken with the actual token (the encrypted key above)
Son olarak, Gövde sekmesinde raw ve JSON (application / json) seçeneklerini seçin, ardından seçeneklerin hemen altındaki düzenleyicide aşağıdakileri yazın:
{ "title": "YES! Authenticated requests with JWT work" }
Şimdi GÖNDER'e basabilirsiniz. Yanıt sekmesine istediğimiz gönderiyle ilgili tüm verileri içeren bir ifadeyle bakın: Başlık anahtarı değeri artıkYES! Authenticated requests with JWT work
register_rest_route( 'jwt-auth/v1', 'your_custom_endpoint ...
. / Jwt-auth / altındaki her şey için yetki gerekir
@ Grazianodev'in cevabını tamamlayarak, cURL kullanarak yetkilendirme simgenizi şu şekilde alırsınız:
/**
* 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;
}
Bundan sonra, isteklerinizi şu başlıkla gönderin: "Yetkilendirme: Bearer $ token"
$ Token yukarıdaki getToken () işlevi tarafından döndürülen belirteçtir.
Ben şahsen sadece yukarıdaki jetonla API erişimini kısıtlamak için " REST API'sını Devre Dışı Bırak ve JWT / OAuth Kimlik Doğrulaması Gerektir " eklentisini kullanıyorum .