2026年11月12日

2026年11月12日

Contraseñas de aplicación de WordPress: crear, revocar y REST API

Este artículo es una edición localizada del original en japonés. Leer el original en japonés

Las contraseñas de aplicación son contraseñas específicas, añadidas en WordPress 5.6, para entregar a la REST API o a herramientas externas. Evitan tener que dar la contraseña de inicio de sesión real, se pueden crear una por herramienta y se pueden revocar solo las que ya no se necesitan. En este artículo se explican los requisitos de uso, cómo crearlas y revocarlas (panel de administración, WP-CLI y PHP), cómo usarlas con la REST API y qué comprobar cuando no funcionan. El contenido corresponde a lo consultado en la documentación para desarrolladores y en el código fuente de WordPress a noviembre de 2026.

Qué se puede y qué no se puede hacer con las contraseñas de aplicación

  • Sirven para autenticarse en la REST API y en XML-RPC. En la REST API se envían el nombre de usuario y la contraseña de aplicación con autenticación Basic.
  • No se pueden usar para iniciar sesión en el panel de administración (wp-login.php). No son para que las use una persona para entrar, sino para programas y herramientas.
  • Los permisos son los mismos que los del usuario que las creó. Si las crea un administrador, la herramienta que tenga esa contraseña puede hacer lo mismo que un administrador. Si solo quieres encargarle la publicación de entradas, crea un usuario con el rol de autor o editor y genera la contraseña con ese usuario.
  • Se pueden revocar una a una. También se registran la fecha y hora del último uso y la dirección IP.

Requisitos de uso

Por defecto, las contraseñas de aplicación solo se pueden usar en sitios con HTTPS o en sitios cuyo tipo de entorno es local. WordPress lo determina así (wp_is_application_passwords_supported()).

return is_ssl() || 'local' === wp_get_environment_type();

En un sitio que sigue en HTTP, el apartado no aparece en la pantalla del perfil. Esto es porque la contraseña se enviaría por una conexión sin cifrar.

Crearlas desde el panel de administración

  1. Abre "Usuarios" (Users) → "Perfil" (Profile) (para otro usuario, edita al usuario correspondiente desde "Usuarios" → "Todos los usuarios").
  2. En el apartado "Contraseñas de aplicación" (Application Passwords), en la parte inferior, escribe en "Nombre de la nueva contraseña de aplicación" un nombre que indique su finalidad (por ejemplo, Script de publicación, Zapier).
  3. Pulsa "Añadir nueva contraseña de aplicación" (Add New Application Password) (según la versión puede aparecer con una redacción ligeramente distinta).
  4. Anota la contraseña de 24 caracteres que se muestra. Si sales de esta pantalla, no se vuelve a mostrar nunca más.

La contraseña se muestra con un espacio cada cuatro caracteres, como abcd EFGH 1234 ijkl MNOP 6789, pero la autenticación funciona con o sin los espacios.

Para revocarla, en la lista del mismo apartado pulsa el botón de revocar de la fila correspondiente. También se pueden revocar todas a la vez con "Revocar todas las contraseñas de aplicación".

Crear, consultar y eliminar con WP-CLI

# Crear (con --porcelain solo se muestra la contraseña)
wp user application-password create admin "Script de publicación" --porcelain

# Mostrar la lista (el uuid se usa para eliminar)
wp user application-password list admin --fields=uuid,name,created,last_used,last_ip

# Eliminar una
wp user application-password delete admin 6633824d-c1d7-4f79-9dd5-4586f734d69e

# Eliminar todas las de ese usuario
wp user application-password delete admin --all

En lugar de admin puedes indicar el nombre de usuario, el correo electrónico o el ID de usuario. Sustituye el uuid por el valor que se muestra en el resultado de list.

Crear, consultar y eliminar con PHP

Si las manejas desde un plugin u otro código, usa la clase WP_Application_Passwords.

<?php
$user_id = 2; // ID del usuario correspondiente

// Crear. Si tiene éxito, devuelve un array [contraseña en texto plano, información guardada]
$result = WP_Application_Passwords::create_new_application_password(
	$user_id,
	array( 'name' => 'Script de publicación' )
);

if ( is_wp_error( $result ) ) {
	error_log( $result->get_error_message() );
} else {
	list( $password, $item ) = $result;
	// $password está en texto plano. Solo se puede obtener en este momento, así que entrégala al usuario de forma segura
	error_log( 'created: ' . $item['uuid'] );
}

// Obtener la lista (name, uuid, created, last_used, last_ip, etc.)
foreach ( WP_Application_Passwords::get_user_application_passwords( $user_id ) as $item ) {
	error_log( $item['name'] . ' ' . $item['uuid'] );
}

// Eliminar una
// WP_Application_Passwords::delete_application_password( $user_id, $uuid );

Lo que se guarda es solo el valor con hash, y la contraseña en texto plano solo se puede obtener en el instante en que se crea.

Usarlas con la REST API

Con curl, añade la autenticación Basic con -u usuario:contraseña_de_aplicación. Primero comprueba que devuelve tu propia información como usuario autenticado.

# Comprobar que la autenticación funciona (si devuelve tu información de usuario, es correcto)
curl -u "admin:abcd EFGH 1234 ijkl MNOP 6789" https://example.com/wp-json/wp/v2/users/me

# Crear una entrada como borrador
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":"Entrada de prueba","content":"Contenido","status":"draft"}'

Si llamas desde PHP a la REST API de otro sitio WordPress, construye tú mismo la cabecera 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 ) );
}

La contraseña del ejemplo es de muestra. No escribas la contraseña real directamente en el código; guárdala en un lugar que no sea público, como una variable de entorno o un archivo de configuración.

Qué comprobar si no se puede autenticar

Síntoma Qué comprobar
En el perfil no está el apartado "Contraseñas de aplicación" Si el sitio usa HTTPS. Si se ha desactivado con un filtro o un plugin
/wp/v2/users/me devuelve 401 Si el nombre de usuario es correcto (el de inicio de sesión, no el nombre para mostrar). Si se ha revocado la contraseña
Debería ser correcto pero se trata como si no hubiera sesión Es posible que el servidor no pase la cabecera Authorization a PHP. En Apache, comprueba que sigue la línea RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] del .htaccess de WordPress
Falla solo en algunas URL Si un plugin de seguridad o un WAF restringe la REST API

Los errores de la REST API en general se explican en "Cómo solucionar los errores de la REST API".

Desactivar las contraseñas de aplicación

En los sitios donde no se usan, se puede desactivar la función entera. Se escribe en el functions.php del tema o en un plugin propio.

<?php
// Desactivar en todo el sitio
add_filter( 'wp_is_application_passwords_available', '__return_false' );

Si quieres permitirlas solo a determinados usuarios, usa el filtro por usuario. El siguiente ejemplo las permite únicamente a los usuarios que tienen permisos de administrador (manage_options).

<?php
add_filter( 'wp_is_application_passwords_available_for_user', function ( $available, $user ) {
	return $available && user_can( $user, 'manage_options' );
}, 10, 2 );

Para restringir el propio acceso a la REST API, consulta "Cómo restringir el acceso a la REST API".

Notas de uso

  • Crea una contraseña distinta para cada herramienta y ponle un nombre que indique su finalidad. Si se filtra, puedes revocar solo la de esa herramienta.
  • Revoca de inmediato las de las herramientas que dejes de usar. Las que en la lista tienen una fecha de último uso antigua pueden no estar usándose.
  • Revisa si de verdad hace falta dar la contraseña de administrador a un servicio externo y genera la contraseña con un usuario que tenga solo los permisos necesarios.

¿Dudas sobre WordPress? Quien publica este sitio está en Japón y responde en japonés. Contacto (en japonés)

お気軽にご相談ください

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