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