2026年11月12日
2026年11月12日
Пароли приложений WordPress: создание, удаление, REST API
Эта статья — локализованная версия японского оригинала. Читать японский оригинал
Пароль приложения — отдельный пароль для REST API и внешних инструментов, появившийся в WordPress 5.6. Он избавляет от необходимости сообщать настоящий пароль для входа: его можно выпускать для каждого инструмента отдельно и отзывать только ставшие ненужными. В статье разобраны условия использования, способы создания и удаления (админ-панель, WP-CLI, PHP), работа через REST API и что проверить, если что-то не получается. Материал сверен в ноябре 2026 года с документацией для разработчиков и исходным кодом 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) (для другого пользователя откройте «Пользователи» → «Все пользователи» и отредактируйте нужного пользователя).
- В разделе «Пароли приложений» (Application Passwords) в нижней части страницы введите в поле «Название нового пароля приложения» (New Application Password Name) понятное по назначению имя (например, «Скрипт публикации», Zapier).
- Нажмите «Добавить новый пароль приложения» (Add New Application Password) (в зависимости от версии надпись может отличаться).
- Запишите показанный пароль из 24 символов. Если покинуть этот экран, он больше не отобразится.
Пароль показывается с пробелами через каждые 4 символа, например abcd EFGH 1234 ijkl MNOP 6789, но аутентификация проходит и с пробелами, и без них.
Чтобы отозвать пароль, нажмите кнопку отзыва в нужной строке списка в том же разделе. Можно отозвать и сразу все пароли кнопкой «Отозвать все пароли приложений» (Revoke all application passwords).
Создание, проверка и удаление через 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 Basic-аутентификация задаётся параметром -u имя_пользователя:пароль_приложения. Сначала проверьте, возвращаются ли сведения о вас как об аутентифицированном пользователе.
# Проверить, проходит ли аутентификация (успех, если вернулись ваши сведения)
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"}'
Если вы вызываете REST API другого сайта WordPress из PHP, заголовок 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 проверьте, сохранилась ли в .htaccess WordPress строка RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] |
| Не работают только некоторые URL | Не ограничивают ли REST API плагин безопасности или WAF |
Об ошибках 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? Издатель сайта находится в Японии и отвечает по-японски. Связаться (по-японски)