2026年11月12日

2026年11月12日

Application Password ของ WordPress คืออะไร: วิธีออก ลบ และใช้กับ REST API

บทความนี้เป็นฉบับปรับให้เหมาะกับท้องถิ่นจากต้นฉบับภาษาญี่ปุ่น อ่านต้นฉบับภาษาญี่ปุ่น

Application Password (รหัสผ่านแอปพลิเคชัน) คือรหัสผ่านเฉพาะสำหรับมอบให้ REST API และเครื่องมือภายนอก ซึ่งเพิ่มเข้ามาใน WordPress 5.6 ทำให้ไม่ต้องบอกรหัสผ่านล็อกอินจริง ออกแยกตามเครื่องมือ และเพิกถอนได้เฉพาะตัวที่ไม่ใช้แล้ว บทความนี้อธิบายเงื่อนไขที่ใช้ได้ วิธีออกและลบ (หน้าผู้ดูแล WP-CLI PHP) การใช้กับ REST API และจุดที่ต้องตรวจเมื่อใช้ไม่สำเร็จ เนื้อหาเป็นสิ่งที่ตรวจจากเอกสารสำหรับนักพัฒนาและซอร์สโค้ดของ WordPress ณ พฤศจิกายน 2026

สิ่งที่ Application Password ทำได้และทำไม่ได้

  • ใช้ยืนยันตัวตนของ REST API และ XML-RPC ได้ ใน REST API จะส่งชื่อผู้ใช้และ Application Password ด้วย Basic Authentication
  • ใช้ล็อกอินหน้าผู้ดูแล (wp-login.php) ไม่ได้ ไม่ได้มีไว้ให้คนล็อกอิน แต่มีไว้สำหรับโปรแกรมและเครื่องมือ
  • สิทธิ์เหมือนกับผู้ใช้ที่ออกรหัสผ่านนั้น หากผู้ดูแลเป็นผู้ออก เครื่องมือที่ถือรหัสผ่านนั้นจะทำได้เหมือนผู้ดูแล หากต้องการมอบหมายแค่การโพสต์ ให้สร้างผู้ใช้ที่เป็นผู้เขียนหรือบรรณาธิการ แล้วออกรหัสผ่านด้วยผู้ใช้นั้น
  • เพิกถอนได้ทีละรายการ และบันทึกวันเวลาที่ใช้ล่าสุดกับ IP address ด้วย

เงื่อนไขที่ใช้ได้

โดยมาตรฐาน Application Password ใช้ได้เฉพาะเว็บไซต์ที่เป็น HTTPS หรือเว็บไซต์ที่ประเภทสภาพแวดล้อมเป็น local เท่านั้น การตัดสินของ WordPress เป็นดังนี้ (wp_is_application_passwords_supported())

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

บนเว็บไซต์ที่ยังเป็น HTTP จะไม่แสดงช่องนี้ในหน้าโปรไฟล์ เพราะจะต้องส่งรหัสผ่านผ่านการสื่อสารที่ไม่เข้ารหัส

ออกรหัสผ่านจากหน้าผู้ดูแล

  1. เปิด "ผู้ใช้ (Users) → โปรไฟล์ (Profile)" (สำหรับของผู้ใช้อื่น ให้แก้ไขผู้ใช้เป้าหมายจาก "ผู้ใช้ (Users) → ผู้ใช้ทั้งหมด (All Users)")
  2. ในช่อง "รหัสผ่านแอปพลิเคชัน (Application Passwords)" ที่อยู่ค่อนไปทางด้านล่าง ให้ใส่ชื่อที่บอกวัตถุประสงค์ได้ (ตัวอย่าง: สคริปต์โพสต์ Zapier) ลงใน "ชื่อรหัสผ่านแอปพลิเคชันใหม่ (New Application Password Name)"
  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

# ลบ 1 รายการ
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'] );
}

// ลบ 1 รายการ
// WP_Application_Passwords::delete_application_password( $user_id, $uuid );

สิ่งที่ถูกบันทึกมีเพียงค่าที่แฮชแล้ว รหัสผ่านที่เป็นข้อความธรรมดาดึงออกมาได้เฉพาะตอนที่ออกเท่านั้น

ใช้กับ REST API

ใน curl ให้ใส่ Basic Authentication ด้วย -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 ให้ตรวจว่ามีบรรทัด RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] ใน .htaccess ของ WordPress ค้างอยู่หรือไม่
ล้มเหลวเฉพาะบาง URL ปลั๊กอินด้านความปลอดภัยหรือ WAF จำกัด REST API อยู่หรือไม่

ข้อผิดพลาดของ REST API โดยทั่วไปอธิบายไว้ใน "วิธีแก้ข้อผิดพลาดของ REST API"

ปิดใช้งาน Application Password

บนไซต์ที่ไม่ได้ใช้ สามารถปิดทั้งฟีเจอร์ได้ เขียนใน 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 ไหม ผู้เผยแพร่เว็บไซต์นี้อยู่ที่ญี่ปุ่นและตอบเป็นภาษาญี่ปุ่น ติดต่อ (ภาษาญี่ปุ่น)

お気軽にご相談ください

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