이것은 실제로 질문이 아니라 JWT를 사용하여 Wordpress API에 인증 된 요청을 작성하는 방법에 대한 안내서입니다. 나는 이것을 나 자신과 같은 주제에 대한 도움이 필요한 사람들을 위해 상기시켜줍니다.
이것은 실제로 질문이 아니라 JWT를 사용하여 Wordpress API에 인증 된 요청을 작성하는 방법에 대한 안내서입니다. 나는 이것을 나 자신과 같은 주제에 대한 도움이 필요한 사람들을 위해 상기시켜줍니다.
답변:
JWT 인증이 필요한 이유
Wordpress를 백엔드로 사용하고 React + Redux 앱을 프런트 엔드로 사용하는 사이트를 구축하고 있으므로 Wordpress API에 요청하여 프런트 엔드의 모든 콘텐츠를 가져옵니다. 일부 요청 (주로 POST 요청)은 인증해야합니다 .JWT를 발견했을 때입니다.
우리가 필요한 것
Wordpress에서 JWT 인증을 사용하려면 먼저 WP REST API 플러그인 용 JWT 인증 을 설치해야합니다 . 플러그인 지침에 설명 된대로 일부 핵심 Wordpress 파일도 수정해야합니다. 특히:
Wordpress 설치 루트 폴더에 포함 된 .htaccess 파일에 다음 줄을 추가해야합니다.
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
Wordpress 설치의 루트 폴더에도 포함 된 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를 사용할 수 있는지 확인하려면 Postman을 시작하고 Wordpress API의 기본 '인덱스'에 요청하십시오.
http://example.com/wp-json/
API에 유사 /jwt-auth/v1
하고 몇 가지 새로운 엔드 포인트 /jwt-auth/v1/token
가 추가되었습니다. 위 요청에 대한 응답으로 찾을 수 있다면 JWT를 사용할 수 있음을 의미합니다.
JWT 토큰 얻기
Postman에 잠시 머물면서 Wordpress API에 토큰을 요청하겠습니다.
http://example.com/wp-json/jwt-auth/v1/token
응답에는 다음과 같은 암호화 된 키인 JWT 토큰이 포함됩니다.
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODg4OFwvZm90b3Jvb20tbmV4dCIsImlhdCI6MTUyMjU5NzQ1MiwibmJmIjoxNTIyNTk3NDUyLCJleHAiOjE1MjMyMDIyNTIsImRhdGEiOnsidXNlciI6eyJpZCI6IjEifX19.hxaaT9iowAX1Xf8RUM42OwbP7QgRNxux8eTtKhWvEUM
인증 된 요청하기
JWT 인증 요청의 예로 ID가 300 인 게시물의 제목을 변경해 봅시다.
Postman에서 메소드로 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 (application / json) 옵션을 선택한 다음 옵션 바로 아래의 편집기에서 다음을 입력하십시오.
{ "title": "YES! Authenticated requests with JWT work" }
이제 SEND를 누를 수 있습니다. 요청한 게시물에 대한 모든 데이터가 포함 된 응답 탭에서 제목 키의 값은 다음과 같아야합니다.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;
}
그런 다음 "Authorization : Bearer $ token"헤더와 함께 요청을 보내십시오.
여기서 $ token은 위의 getToken () 함수가 반환 한 토큰입니다.
필자는 개인적으로 플러그인 " REST API 비활성화 및 JWT / OAuth 인증 필요 "를 사용하여 위의 토큰으로 만 API 액세스를 제한합니다.