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 的網站上,個人資料畫面不會顯示這個項目。因為這樣會把密碼以未加密的通訊傳送。

在後台發行

  1. 開啟「使用者 → 個人資料」(Users → Profile)(其他使用者的部分,請從「使用者 → 所有使用者」編輯目標使用者)。
  2. 在下方的「應用程式密碼」(Application Passwords)區塊中,於「新的應用程式密碼名稱」輸入能看出用途的名稱(例:發文用腳本、Zapier)。
  3. 按下「新增應用程式密碼」(依版本不同,可能顯示為「新增應用程式密碼」的其他表記)。
  4. 記下所顯示的 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 有疑問嗎?本站營運方位於日本,僅以日文回覆。 聯絡我們(日文)

お気軽にご相談ください

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