2026年11月12日

2026年11月12日

Hasła aplikacji w WordPress: tworzenie, usuwanie i REST API

Ten artykuł jest zlokalizowaną wersją japońskiego oryginału. Przeczytaj japoński oryginał

Hasło aplikacji (Application Password) to osobne hasło dla REST API i zewnętrznych narzędzi, dodane w WordPress 5.6. Nie musisz podawać prawdziwego hasła do logowania, możesz tworzyć osobne hasło dla każdego narzędzia i unieważniać tylko te, które nie są już potrzebne. W tym artykule omawiam warunki użycia, tworzenie i usuwanie (panel, WP-CLI, PHP), użycie w REST API oraz co sprawdzić, gdy coś nie działa. Treść sprawdziłem w dokumentacji dla deweloperów WordPress i w kodzie źródłowym według stanu na listopad 2026.

Co hasła aplikacji potrafią, a czego nie

  • Można ich używać do uwierzytelniania w REST API i XML-RPC. W REST API wysyłasz nazwę użytkownika i hasło aplikacji przez uwierzytelnianie Basic.
  • Nie da się ich użyć do logowania do panelu administracyjnego (wp-login.php). Służą programom i narzędziom, a nie logowaniu przez człowieka.
  • Uprawnienia są takie same jak użytkownika, który je utworzył. Jeśli utworzy je administrator, narzędzie z tym hasłem może wykonywać te same operacje co administrator. Jeśli chcesz powierzyć tylko publikowanie wpisów, utwórz użytkownika z rolą autora lub redaktora i utwórz hasło dla niego.
  • Można je unieważniać pojedynczo. Zapisywane są też data ostatniego użycia i adres IP.

Warunki użycia

Hasła aplikacji domyślnie działają tylko w witrynach z HTTPS albo takich, w których typ środowiska to local. WordPress sprawdza to następująco (wp_is_application_passwords_supported()).

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

W witrynie działającej wyłącznie przez HTTP pozycja nie pojawia się na ekranie profilu. Hasło byłoby bowiem wysyłane nieszyfrowanym połączeniem.

Utwórz hasło w panelu administracyjnym

  1. Otwórz „Użytkownicy → Twój profil" (Users → Profile). Dla innych użytkowników otwórz „Użytkownicy → Wszyscy użytkownicy" i edytuj wybranego użytkownika.
  2. W sekcji „Hasła aplikacji" (Application Passwords) w dolnej części w polu „Nazwa nowego hasła aplikacji" wpisz nazwę wskazującą przeznaczenie (np. skrypt publikujący, Zapier).
  3. Kliknij „Dodaj nowe hasło aplikacji" (w niektórych wersjach napis może się różnić).
  4. Zapisz wyświetlone 24-znakowe hasło. Po opuszczeniu ekranu nie zobaczysz go już nigdy.

Hasło jest wyświetlane ze spacjami co cztery znaki, np. abcd EFGH 1234 ijkl MNOP 6789, ale uwierzytelnianie działa zarówno ze spacjami, jak i bez nich.

Aby unieważnić hasło, kliknij przycisk unieważnienia w wierszu na liście w tej samej sekcji. Możesz też unieważnić wszystkie naraz przyciskiem „Unieważnij wszystkie hasła aplikacji".

Tworzenie, sprawdzanie i usuwanie w WP-CLI

# Utwórz (jeśli chcesz wyświetlić samo hasło, dodaj --porcelain)
wp user application-password create admin "skrypt publikujący" --porcelain

# Wyświetl listę (uuid służy do usuwania)
wp user application-password list admin --fields=uuid,name,created,last_used,last_ip

# Usuń jedno
wp user application-password delete admin 6633824d-c1d7-4f79-9dd5-4586f734d69e

# Usuń wszystkie hasła tego użytkownika
wp user application-password delete admin --all

Zamiast admin możesz podać nazwę użytkownika, adres e-mail lub ID użytkownika. Wartość uuid zastąp wartością wyświetloną w wyniku list.

Tworzenie, sprawdzanie i usuwanie w PHP

Jeśli obsługujesz je np. z poziomu wtyczki, użyj klasy WP_Application_Passwords.

<?php
$user_id = 2; // ID docelowego użytkownika

// Utwórz. Po powodzeniu zwracana jest tablica [hasło w postaci jawnej, zapisane informacje]
$result = WP_Application_Passwords::create_new_application_password(
	$user_id,
	array( 'name' => 'skrypt publikujący' )
);

if ( is_wp_error( $result ) ) {
	error_log( $result->get_error_message() );
} else {
	list( $password, $item ) = $result;
	// $password jest w postaci jawnej. Można je pobrać tylko teraz, więc przekaż je użytkownikowi bezpieczną drogą
	error_log( 'created: ' . $item['uuid'] );
}

// Pobierz listę (name, uuid, created, last_used, last_ip itd.)
foreach ( WP_Application_Passwords::get_user_application_passwords( $user_id ) as $item ) {
	error_log( $item['name'] . ' ' . $item['uuid'] );
}

// Usuń jedno
// WP_Application_Passwords::delete_application_password( $user_id, $uuid );

Zapisywana jest tylko wartość po zahashowaniu, a hasło w postaci jawnej można odczytać jedynie w chwili utworzenia.

Użycie w REST API

W curl dodajesz uwierzytelnianie Basic przez -u nazwa_użytkownika:hasło_aplikacji. Najpierw sprawdź, czy zwracane są Twoje informacje jako uwierzytelnionego użytkownika.

# Sprawdź, czy uwierzytelnianie działa (jeśli wróci Twoja informacja o użytkowniku, wszystko gra)
curl -u "admin:abcd EFGH 1234 ijkl MNOP 6789" https://example.com/wp-json/wp/v2/users/me

# Utwórz wpis jako szkic
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":"Wpis testowy","content":"Treść","status":"draft"}'

Jeśli z PHP wywołujesz REST API innej witryny WordPress, nagłówek Authorization zbudujesz samodzielnie.

<?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 ) );
}

Hasło w przykładzie to wzór. Prawdziwego hasła nie wpisuj bezpośrednio w kodzie, tylko trzymaj je w miejscu niedostępnym publicznie, takim jak zmienna środowiskowa lub plik konfiguracyjny.

Co sprawdzić, gdy uwierzytelnianie nie działa

Objaw Co sprawdzić
Na profilu nie ma sekcji „Hasła aplikacji" Czy witryna działa przez HTTPS. Czy funkcja nie została wyłączona filtrem lub wtyczką
/wp/v2/users/me zwraca 401 Czy nazwa użytkownika jest poprawna (to login, a nie wyświetlana nazwa). Czy hasło nie zostało unieważnione
Dane są poprawne, a mimo to użytkownik jest traktowany jako niezalogowany Możliwe, że serwer nie przekazuje do PHP nagłówka Authorization. W Apache sprawdź, czy w .htaccess WordPress nadal jest wiersz RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
Zawodzą tylko niektóre adresy URL Czy wtyczka bezpieczeństwa lub WAF nie ogranicza REST API

Ogólnie o błędach REST API piszę w „Jak naprawić błędy REST API".

Wyłączanie haseł aplikacji

W witrynach, w których z nich nie korzystasz, możesz wyłączyć całą funkcję. Wpisz to w functions.php motywu lub we własnej wtyczce.

<?php
// Wyłącz w całej witrynie
add_filter( 'wp_is_application_passwords_available', '__return_false' );

Jeśli chcesz zezwolić tylko wybranym użytkownikom, użyj filtra dla poszczególnych użytkowników. Poniższy przykład zezwala wyłącznie użytkownikom z uprawnieniami administratora (manage_options).

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

Jak ograniczyć dostęp do samego REST API, opisuję w „Jak ograniczyć dostęp do REST API".

Uwagi eksploatacyjne

  • Dla każdego narzędzia utwórz osobne hasło i nadaj mu nazwę wskazującą przeznaczenie. Gdy wycieknie, unieważnisz tylko to jedno.
  • Hasła narzędzi, których już nie używasz, od razu unieważnij. Pozycje z dawną datą ostatniego użycia na liście mogą być nieużywane.
  • Sprawdź, czy na pewno trzeba przekazywać usługom zewnętrznym hasło administratora, i twórz hasła dla użytkownika, który ma tylko potrzebne uprawnienia.

Pytania o WordPress? Wydawca tej witryny ma siedzibę w Japonii i odpowiada po japońsku. Kontakt (po japońsku)

お気軽にご相談ください

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