2026年11月12日
2026年11月12日
WordPress 애플리케이션 비밀번호란|발급·삭제 절차와 REST API에서 사용하는 법
이 글은 일본어 원문을 현지화한 버전입니다. 일본어 원문 보기
애플리케이션 비밀번호(Application Passwords)는 WordPress 5.6에서 추가된, REST API나 외부 도구에 전달하기 위한 전용 비밀번호입니다. 본래의 로그인 비밀번호를 알려 주지 않아도 되고, 도구마다 발급하여 필요 없어진 것만 취소할 수 있습니다. 이 글에서는 사용 조건, 발급과 삭제 방법(관리자 화면·WP-CLI·PHP), REST API에서 사용하는 법, 잘 되지 않을 때의 확인 사항을 설명합니다. 내용은 2026년 11월 시점에 WordPress 개발자용 문서와 소스 코드를 확인한 것입니다.
애플리케이션 비밀번호로 할 수 있는 것과 없는 것
- REST API와 XML-RPC 인증에 사용할 수 있습니다. REST API에서는 사용자명과 애플리케이션 비밀번호를 Basic 인증으로 보냅니다.
- 관리자 화면 로그인(wp-login.php)에는 사용할 수 없습니다. 사람이 로그인하기 위한 것이 아니라 프로그램이나 도구를 위한 것입니다.
- 권한은 발급한 사용자와 같습니다. 관리자가 발급하면 그 비밀번호를 가진 도구는 관리자와 같은 조작을 할 수 있습니다. 글 게시만 맡기고 싶다면 기고자나 편집자 사용자를 만들어 그 사용자로 발급합니다.
- 하나씩 취소할 수 있습니다. 마지막으로 사용된 일시와 IP 주소도 기록됩니다.
사용 조건
애플리케이션 비밀번호는 기본적으로 HTTPS 사이트이거나 환경 유형이 local인 사이트에서만 사용할 수 있습니다. WordPress의 판정은 다음과 같습니다(wp_is_application_passwords_supported()).
return is_ssl() || 'local' === wp_get_environment_type();
HTTP 그대로인 사이트에서는 프로필 화면에 항목이 표시되지 않습니다. 비밀번호를 암호화되지 않은 통신으로 보내게 되기 때문입니다.
관리자 화면에서 발급하기
- "사용자(Users) → 프로필(Profile)"을 엽니다(다른 사용자의 것은 "사용자 → 모든 사용자(All Users)"에서 대상 사용자를 편집합니다).
- 아래쪽에 있는 "애플리케이션 비밀번호" 영역에서 "새 애플리케이션 비밀번호 이름"에 용도를 알 수 있는 이름(예: 게시용 스크립트, Zapier)을 넣습니다.
- "새 애플리케이션 비밀번호 추가"를 누릅니다(버전에 따라 표시가 다를 수 있습니다).
- 표시된 24자의 비밀번호를 적어 둡니다. 이 화면을 벗어나면 다시는 표시되지 않습니다.
비밀번호는 abcd EFGH 1234 ijkl MNOP 6789처럼 4글자마다 공백을 넣어 표시되지만, 공백은 있어도 없어도 인증됩니다.
취소할 때는 같은 영역의 목록에서 대상 행의 취소 버튼을 누릅니다. "모든 애플리케이션 비밀번호 취소"로 한꺼번에 취소할 수도 있습니다.
WP-CLI로 발급·확인·삭제하기
# 발급한다(비밀번호만 표시하려면 --porcelain)
wp user application-password create admin "게시용 스크립트" --porcelain
# 목록을 표시한다(uuid는 삭제에 사용)
wp user application-password list admin --fields=uuid,name,created,last_used,last_ip
# 하나를 삭제한다
wp user application-password delete admin 6633824d-c1d7-4f79-9dd5-4586f734d69e
# 해당 사용자의 것을 모두 삭제한다
wp user application-password delete admin --all
admin 부분은 사용자명·이메일 주소·사용자 ID 중 무엇으로든 지정할 수 있습니다. uuid는 list 결과에 표시되는 값으로 바꾸세요.
PHP로 발급·확인·삭제하기
플러그인 등에서 다룰 때는 WP_Application_Passwords 클래스를 사용합니다.
<?php
$user_id = 2; // 대상 사용자 ID
// 발급한다. 성공하면 [평문 비밀번호, 저장된 정보] 의 배열이 반환된다
$result = WP_Application_Passwords::create_new_application_password(
$user_id,
array( 'name' => '게시용 스크립트' )
);
if ( is_wp_error( $result ) ) {
error_log( $result->get_error_message() );
} else {
list( $password, $item ) = $result;
// $password 는 평문. 이때만 얻을 수 있으므로 안전한 방법으로 이용자에게 전달한다
error_log( 'created: ' . $item['uuid'] );
}
// 목록을 가져온다(name·uuid·created·last_used·last_ip 등)
foreach ( WP_Application_Passwords::get_user_application_passwords( $user_id ) as $item ) {
error_log( $item['name'] . ' ' . $item['uuid'] );
}
// 하나를 삭제한다
// WP_Application_Passwords::delete_application_password( $user_id, $uuid );
저장되는 것은 해시된 값뿐이며, 평문 비밀번호는 발급한 순간에만 꺼낼 수 있습니다.
REST API에서 사용하기
curl에서는 -u 사용자명:애플리케이션 비밀번호로 Basic 인증을 붙입니다. 먼저 인증된 사용자로서 내 정보가 반환되는지 확인합니다.
# 인증되는지 확인한다(내 사용자 정보가 반환되면 성공)
curl -u "admin:abcd EFGH 1234 ijkl MNOP 6789" https://example.com/wp-json/wp/v2/users/me
# 임시글을 만든다
curl -u "admin:abcd EFGH 1234 ijkl MNOP 6789" \
-X POST https://example.com/wp-json/wp/v2/posts \
-H "Content-Type: application/json" \
-d '{"title":"테스트 글","content":"본문","status":"draft"}'
PHP에서 다른 WordPress 사이트의 REST API를 호출할 때는 Authorization 헤더를 직접 만듭니다.
<?php
$response = wp_remote_get(
'https://example.com/wp-json/wp/v2/users/me',
array(
'headers' => array(
'Authorization' => 'Basic ' . base64_encode( 'admin:abcd EFGH 1234 ijkl MNOP 6789' ),
),
)
);
if ( ! is_wp_error( $response ) ) {
error_log( wp_remote_retrieve_response_code( $response ) );
}
예시의 비밀번호는 샘플입니다. 실제 비밀번호는 코드에 직접 적지 말고 환경 변수나 설정 파일 등 공개되지 않는 곳에 둡니다.
인증되지 않을 때의 확인 사항
| 증상 | 확인할 내용 |
|---|---|
| 프로필에 "애플리케이션 비밀번호" 영역이 없다 | 사이트가 HTTPS로 되어 있는지. 필터나 플러그인으로 비활성화되어 있지 않은지 |
/wp/v2/users/me가 401이 된다 |
사용자명이 올바른지(표시 이름이 아니라 로그인 이름). 비밀번호를 취소하지 않았는지 |
| 올바른 것 같은데 비로그인 취급이 된다 | 서버가 Authorization 헤더를 PHP에 전달하지 않고 있을 가능성. Apache에서는 WordPress의 .htaccess에 있는 RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 줄이 남아 있는지 확인 |
| 일부 URL만 실패한다 | 보안 계열 플러그인이나 WAF가 REST API를 제한하고 있지 않은지 |
REST API 오류 전반은 "REST API 오류 해결 방법"에서 설명합니다.
애플리케이션 비밀번호 비활성화하기
사용하지 않는 사이트에서는 기능 자체를 비활성화할 수 있습니다. 테마의 functions.php나 직접 만든 플러그인에 작성합니다.
<?php
// 사이트 전체에서 비활성화한다
add_filter( 'wp_is_application_passwords_available', '__return_false' );
특정 사용자에게만 허용하려면 사용자별 필터를 사용합니다. 다음 예는 관리자 권한(manage_options)을 가진 사용자에게만 허용합니다.
<?php
add_filter( 'wp_is_application_passwords_available_for_user', function ( $available, $user ) {
return $available && user_can( $user, 'manage_options' );
}, 10, 2 );
REST API 자체에 대한 접근을 제한하는 방법은 "REST API 접근을 제한하는 방법"을 참조하세요.
운영 시 주의점
- 도구마다 다른 비밀번호를 발급하고, 이름으로 용도를 알 수 있게 합니다. 유출되었을 때 그 도구의 것만 취소할 수 있습니다.
- 사용하지 않게 된 도구의 것은 바로 취소합니다. 목록에서 마지막 사용 일시가 오래된 것은 사용되지 않고 있을 가능성이 있습니다.
- 관리자의 비밀번호를 외부 서비스에 전달해야 하는지 재검토하고, 필요한 권한만 가진 사용자로 발급합니다.
WordPress에 대해 궁금한 점이 있으신가요? 이 사이트의 운영사는 일본에 있으며 일본어로 답변합니다. 문의하기(일본어)