-
목차
🔐 워드프레스 REST API는 기본적으로 "오픈"되어 있다?
REST API는 워드프레스의 데이터를 외부 앱이나 JavaScript에서 접근할 수 있게 해줍니다.
하지만 기본 설정에서는 공개된 정보(예: 포스트 목록)는 누구나 접근 가능합니다.문제는, 수정/삭제/작성 등의 민감한 요청은 인증 없이는 막아야 한다는 점이죠.
✅ 인증이 필요한 상황
요청 유형인증 필요 여부GET /wp/v2/posts ❌ (기본 공개) POST /wp/v2/posts ✅ 로그인 사용자만 PUT /wp/v2/users/me ✅ 현재 사용자만 커스텀 API /wp-json/my/v1/data ⛔ 기본 비인증 → 직접 권한 체크 필수
🔑 인증 방식 1: Nonce 인증 (워드프레스 로그인 사용자용)
💡 개념 정리
- Nonce는 워드프레스 내부 요청에서 CSRF 방지용 토큰
- 프론트엔드 JavaScript → 백엔드 API 통신 시 사용
✅ 사용 흐름 요약
txt복사편집1. wp_localize_script → nonce 전달 2. fetch/ajax → nonce 포함 요청 3. PHP → check_ajax_referer or wp_verify_nonce 로 검증
✅ 코드 예시
functions.php
php복사편집function my_enqueue_scripts() { wp_enqueue_script('my-script', get_template_directory_uri().'/main.js', array(), null, true); wp_localize_script('my-script', 'my_api', array( 'nonce' => wp_create_nonce('wp_rest'), 'rest_url' => rest_url('my/v1/secure-data') )); } add_action('wp_enqueue_scripts', 'my_enqueue_scripts');JavaScript (fetch 예시)
js복사편집fetch(my_api.rest_url, { method: 'GET', headers: { 'X-WP-Nonce': my_api.nonce } }) .then(res => res.json()) .then(data => console.log(data));PHP – 커스텀 엔드포인트 등록
php복사편집add_action('rest_api_init', function () { register_rest_route('my/v1', '/secure-data', array( 'methods' => 'GET', 'callback' => 'my_secure_data', 'permission_callback' => function () { return current_user_can('edit_posts'); } )); }); function my_secure_data() { return ['message' => '로그인된 사용자만 볼 수 있어요']; }
🛡 인증 방식 2: JWT 인증 (토큰 기반 API 보안)
✅ 서버 간 통신 / 앱 통신 / 헤드리스 프론트엔드에 적합
✅ 로그인 없이도 토큰 발급 → 저장 → 재사용 가능
🔧 플러그인 설치 (추천)
- JWT Authentication for WP REST API
- 또는 직접 구현 (토큰 서명, 만료, 파싱 필요)
wp-config.php 설정
php복사편집define('JWT_AUTH_SECRET_KEY', '🔐 여기에 강력한 시크릿 키 입력'); define('JWT_AUTH_CORS_ENABLE', true); // CORS 허용
✅ 토큰 발급 요청 예시 (POST)
bash복사편집POST /wp-json/jwt-auth/v1/token { "username": "admin", "password": "yourpassword" }➡ 응답:
json복사편집{ "token": "eyJ0eXAiOiJKV1QiLCJhbGciOi...", "user_email": "admin@example.com" }
✅ 토큰으로 인증 요청
bash복사편집GET /wp-json/my/v1/protected Authorization: Bearer eyJ0eXAiOiJKV1QiLC...→ REST API 내에서는 워드프레스 로그인과 동일한 권한으로 인식
🧩 커스텀 REST API + JWT 권한 체크 예시
php복사편집add_action('rest_api_init', function () { register_rest_route('my/v1', '/protected', array( 'methods' => 'GET', 'callback' => 'my_protected_data', 'permission_callback' => function () { return current_user_can('edit_pages'); } )); }); function my_protected_data() { return ['status' => 'ok', 'data' => '비공개 콘텐츠']; }📌 permission_callback은 반드시 사용자 권한 체크 필수!
✅ REST API 보안 체크리스트
항목완료 여부permission_callback 모든 엔드포인트에 지정 ✅ / ❌ Nonce 사용 시 CSRF 방어 완료 ✅ / ❌ JWT 사용 시 헤더 구성 및 만료 체크 적용 ✅ / ❌ 사용자 권한 검사 (current_user_can) 수행 ✅ / ❌ 민감 데이터 응답 시 인증 요구 처리 ✅ / ❌ '워드프레스' 카테고리의 다른 글
🚀 헤드리스(Headless) 워드프레스란? (2) 2025.04.28 🔧 구텐베르크(Gutenberg)란? (4) 2025.04.27 🧠 왜 사용자 권한 시스템이 중요한가? (0) 2025.04.27 🌐 멀티사이트(Multisite)란? (2) 2025.04.26 ⏱ WP-Cron이 뭐지? 서버 크론과는 다르다! (2) 2025.04.26 🧠 워드프레스는 "조건별로" 템플릿을 불러옵니다 (1) 2025.04.26 🧠 왜 직접 플러그인을 만들어야 할까? (2) 2025.04.25 🧠 왜 DB 구조를 이해해야 하는가? (2) 2025.04.25