방법 : Wordpress API에 JWT 인증 요청 만들기


17

이것은 실제로 질문이 아니라 JWT를 사용하여 Wordpress API에 인증 된 요청을 작성하는 방법에 대한 안내서입니다. 나는 이것을 나 자신과 같은 주제에 대한 도움이 필요한 사람들을 위해 상기시켜줍니다.


3
이 질문을 질문 형식으로 지정한 다음 솔루션을 실제 답변으로 게시해야합니다. 그렇지 않으면 답변되지 않은 질문처럼 보입니다.
Jacob Peattie

답변:


19

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


2
인증해야하는 통화와 백엔드에서 인증하지 않아도되는 통화를 어떻게 구분 하시겠습니까?
uruk

또한 WordPress REST API를 사용하여 WordPress 데이터베이스에서 게시물 데이터를 가져 오는 React 앱을 만들고 있지만 REST API 끝점을 공개적으로 사용하고 싶지 않습니다. 내 React 앱을 제외하고 REST API에 대한 액세스를 제한하는 방법이 있습니까?
Chris

@chris 엔드 포인트를 권한이없는 요청에서 숨기려면 네임 스페이스 jwt_auth 아래에 추가하십시오 register_rest_route( 'jwt-auth/v1', 'your_custom_endpoint ... . / jwt-auth / 아래의 모든 것은 인증이 필요합니다
Athoxx

4

@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 액세스를 제한합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.