방법 : 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.