Đây thực sự không phải là một câu hỏi mà là một hướng dẫn về cách thực hiện các yêu cầu được xác thực cho API Wordpress bằng JWT. Tôi đang viết điều này như một lời nhắc nhở cho bản thân và cho những người có thể cần sự giúp đỡ với cùng một chủ đề.
Đây thực sự không phải là một câu hỏi mà là một hướng dẫn về cách thực hiện các yêu cầu được xác thực cho API Wordpress bằng JWT. Tôi đang viết điều này như một lời nhắc nhở cho bản thân và cho những người có thể cần sự giúp đỡ với cùng một chủ đề.
Câu trả lời:
Tại sao xác thực JWT
Tôi đang xây dựng một trang web sử dụng Wordpress làm back-end và ứng dụng React + Redux làm giao diện người dùng, vì vậy tôi sẽ lấy tất cả nội dung trong front-end bằng cách yêu cầu API Wordpress. Một số yêu cầu (chủ yếu là các yêu cầu POST) phải được xác thực, đó là khi tôi bắt gặp JWT.
Những gì chúng tôi cần
Để sử dụng xác thực JWT với Wordpress, trước tiên chúng tôi cần cài đặt plugin JWT xác thực cho WP REST API . Như được giải thích trong hướng dẫn của plugin, chúng tôi cũng cần sửa đổi một số tệp Wordpress cốt lõi. Đặc biệt:
Trong tệp .htaccess có trong thư mục gốc của bản cài đặt Wordpress, chúng ta cần thêm các dòng sau:
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
Trong tệp wp-config.php, cũng được bao gồm trong thư mục gốc của cài đặt Wordpress, chúng ta cần thêm các dòng sau:
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);
Kiểm tra xem JWT có khả dụng không
Để xác minh rằng bây giờ chúng ta có thể sử dụng JWT, kích hoạt Postman và yêu cầu 'chỉ mục' mặc định của API Wordpress:
http://example.com/wp-json/
Một vài điểm cuối mới, thích /jwt-auth/v1
và /jwt-auth/v1/token
nên được thêm vào API. Nếu bạn có thể tìm thấy chúng trong phản hồi yêu cầu trên, điều đó có nghĩa là JWT hiện đã có sẵn.
Nhận mã thông báo JWT
Hãy ở lại Postman ngay bây giờ và hãy yêu cầu mã thông báo cho API Wordpress:
http://example.com/wp-json/jwt-auth/v1/token
Phản hồi sẽ chứa mã thông báo JWT, đây là một khóa được mã hóa trông giống như thế này:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODg4OFwvZm90b3Jvb20tbmV4dCIsImlhdCI6MTUyMjU5NzQ1MiwibmJmIjoxNTIyNTk3NDUyLCJleHAiOjE1MjMyMDIyNTIsImRhdGEiOnsidXNlciI6eyJpZCI6IjEifX19.hxaaT9iowAX1Xf8RUM42OwbP7QgRNxux8eTtKhWvEUM
Yêu cầu xác thực
Hãy thử thay đổi tiêu đề của bài đăng có ID 300 làm ví dụ về yêu cầu được xác thực với JWT.
Trong Postman, chọn POST làm phương thức và nhập điểm cuối sau:
http://example.com/wp-json/wp/v2/posts/300
Chọn Không xác thực trong tab Ủy quyền và thêm phần sau vào tab Tiêu đề:
'Content-type': 'application/json',
'Authorization': 'Bearer jwtToken' // Replace jwtToken with the actual token (the encrypted key above)
Cuối cùng, trong tab Body, chọn tùy chọn raw và JSON (application / json), sau đó trong trình chỉnh sửa ngay bên dưới các tùy chọn gõ như sau:
{ "title": "YES! Authenticated requests with JWT work" }
Bây giờ bạn có thể nhấn GỬI. Nhìn vào tab phản hồi với tất cả dữ liệu về bài đăng mà chúng tôi yêu cầu: giá trị cho khóa tiêu đề bây giờ sẽ làYES! Authenticated requests with JWT work
register_rest_route( 'jwt-auth/v1', 'your_custom_endpoint ...
. Bất cứ điều gì dưới / jwt-auth / sẽ cần sự cho phép
Bổ sung câu trả lời của @ grazianodev, đây là cách bạn nhận được mã thông báo ủy quyền của mình bằng 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;
}
Sau đó, gửi yêu cầu của bạn với tiêu đề: "Ủy quyền: Mã thông báo $ Bearer"
Trong đó $ token là mã thông báo được trả về bởi hàm getToken () ở trên.
Cá nhân tôi sử dụng plugin " Vô hiệu hóa API REST và Yêu cầu xác thực JWT / OAuth " để hạn chế quyền truy cập API chỉ với mã thông báo ở trên.