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, поле на странице профиля не отображается: пароль пришлось бы передавать по незашифрованному каналу.

Создание в админ-панели

  1. Откройте «Пользователи» (Users) → «Профиль» (Profile) (для другого пользователя откройте «Пользователи» → «Все пользователи» и отредактируйте нужного пользователя).
  2. В разделе «Пароли приложений» (Application Passwords) в нижней части страницы введите в поле «Название нового пароля приложения» (New Application Password Name) понятное по назначению имя (например, «Скрипт публикации», Zapier).
  3. Нажмите «Добавить новый пароль приложения» (Add New Application Password) (в зависимости от версии надпись может отличаться).
  4. Запишите показанный пароль из 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? Издатель сайта находится в Японии и отвечает по-японски. Связаться (по-японски)

お気軽にご相談ください

お見積りへ お問い合わせへ
▲