2026年11月12日

2026年11月12日

Mật khẩu ứng dụng WordPress: cách tạo, xóa và dùng với REST API

Đây là phiên bản được bản địa hóa từ bài viết gốc tiếng Nhật. Đọc bài gốc tiếng Nhật

Mật khẩu ứng dụng (Application Passwords) là mật khẩu riêng để trao cho REST API và các công cụ bên ngoài, được thêm vào từ WordPress 5.6. Bạn không cần cho biết mật khẩu đăng nhập thật, có thể cấp riêng cho từng công cụ và chỉ thu hồi những cái không còn cần. Bài viết này giải thích điều kiện dùng, cách tạo và xóa (trang quản trị, WP-CLI, PHP), cách dùng với REST API và các điểm cần kiểm tra khi không chạy được. Nội dung là phần đã đối chiếu với tài liệu dành cho lập trình viên và mã nguồn của WordPress vào tháng 11/2026.

Mật khẩu ứng dụng làm được và không làm được gì

  • Dùng được để xác thực REST API và XML-RPC. Với REST API, tên người dùng và mật khẩu ứng dụng được gửi bằng xác thực Basic.
  • Không dùng được để đăng nhập trang quản trị (wp-login.php). Nó không dành cho người đăng nhập mà dành cho chương trình và công cụ.
  • Quyền giống với người dùng đã tạo ra nó. Nếu quản trị viên tạo, công cụ giữ mật khẩu đó làm được các thao tác như quản trị viên. Nếu chỉ muốn giao việc đăng bài, hãy tạo một người dùng có vai trò tác giả hoặc biên tập viên và tạo bằng người dùng đó.
  • Có thể thu hồi từng cái một. Thời điểm dùng gần nhất và địa chỉ IP cũng được ghi lại.

Điều kiện để dùng

Theo mặc định, mật khẩu ứng dụng chỉ dùng được trên site HTTPS hoặc site có loại môi trường là local. WordPress xác định như sau (wp_is_application_passwords_supported()).

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

Với site vẫn dùng HTTP, mục này không hiển thị trong màn hình hồ sơ, vì mật khẩu sẽ được gửi qua đường truyền không mã hóa.

Tạo bằng trang quản trị

  1. Mở "Thành viên → Hồ sơ" (Users → Profile) (với người dùng khác, hãy chỉnh sửa người dùng đó từ "Thành viên → Tất cả thành viên" / Users → All Users).
  2. Trong mục "Mật khẩu ứng dụng" (Application Passwords) ở phía dưới, nhập một tên cho biết mục đích (ví dụ: script đăng bài, Zapier) vào "Tên mật khẩu ứng dụng mới" (New Application Password Name).
  3. Nhấn "Thêm mật khẩu ứng dụng mới" (Add New Application Password) (tùy phiên bản có thể hiển thị hơi khác).
  4. Hãy ghi lại mật khẩu 24 ký tự được hiển thị. Nếu rời khỏi màn hình này, nó sẽ không hiển thị lại lần nữa.

Mật khẩu được hiển thị với khoảng trắng sau mỗi 4 ký tự như abcd EFGH 1234 ijkl MNOP 6789, nhưng có hay không có khoảng trắng đều xác thực được.

Khi thu hồi, hãy nhấn nút thu hồi ở dòng tương ứng trong danh sách của cùng mục. Bạn cũng có thể thu hồi tất cả cùng lúc bằng "Thu hồi tất cả mật khẩu ứng dụng".

Tạo, kiểm tra và xóa bằng WP-CLI

# Tạo mới (nếu chỉ muốn hiển thị mật khẩu thì dùng --porcelain)
wp user application-password create admin "Script đăng bài" --porcelain

# Hiển thị danh sách (uuid dùng để xóa)
wp user application-password list admin --fields=uuid,name,created,last_used,last_ip

# Xóa một mật khẩu
wp user application-password delete admin 6633824d-c1d7-4f79-9dd5-4586f734d69e

# Xóa toàn bộ mật khẩu của người dùng đó
wp user application-password delete admin --all

Phần admin có thể chỉ định bằng tên người dùng, địa chỉ email hoặc ID người dùng. Hãy thay uuid bằng giá trị hiển thị trong kết quả của list.

Tạo, kiểm tra và xóa bằng PHP

Khi xử lý từ plugin, v.v., hãy dùng lớp WP_Application_Passwords.

<?php
$user_id = 2; // ID của người dùng đích

// Tạo mới. Nếu thành công sẽ trả về mảng [mật khẩu dạng văn bản thuần, thông tin đã lưu]
$result = WP_Application_Passwords::create_new_application_password(
	$user_id,
	array( 'name' => 'Script đăng bài' )
);

if ( is_wp_error( $result ) ) {
	error_log( $result->get_error_message() );
} else {
	list( $password, $item ) = $result;
	// $password là văn bản thuần. Chỉ lấy được lúc này, nên hãy trao cho người dùng bằng cách an toàn
	error_log( 'created: ' . $item['uuid'] );
}

// Lấy danh sách (name, uuid, created, last_used, last_ip, v.v.)
foreach ( WP_Application_Passwords::get_user_application_passwords( $user_id ) as $item ) {
	error_log( $item['name'] . ' ' . $item['uuid'] );
}

// Xóa một mật khẩu
// WP_Application_Passwords::delete_application_password( $user_id, $uuid );

Chỉ giá trị đã băm được lưu, còn mật khẩu dạng văn bản thuần chỉ lấy ra được ngay tại khoảnh khắc tạo.

Dùng với REST API

Với curl, hãy gắn xác thực Basic bằng -u tên_người_dùng:mật_khẩu_ứng_dụng. Trước hết, hãy kiểm tra xem thông tin của chính bạn có được trả về với tư cách người dùng đã xác thực không.

# Kiểm tra đã xác thực được chưa (trả về thông tin người dùng của bạn là thành công)
curl -u "admin:abcd EFGH 1234 ijkl MNOP 6789" https://example.com/wp-json/wp/v2/users/me

# Tạo một bài viết nháp
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":"Bài đăng thử","content":"Nội dung","status":"draft"}'

Khi gọi REST API của một site WordPress khác từ PHP, hãy tự tạo header 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 ) );
}

Mật khẩu trong ví dụ chỉ là mẫu. Đừng viết mật khẩu thật trực tiếp vào mã, mà hãy đặt ở nơi không công khai như biến môi trường hoặc tệp cấu hình.

Các điểm cần kiểm tra khi không xác thực được

Triệu chứng Điều cần kiểm tra
Không có mục "Mật khẩu ứng dụng" trong hồ sơ Site đã dùng HTTPS chưa. Có bị tắt bằng bộ lọc hoặc plugin không
/wp/v2/users/me trả về 401 Tên người dùng có đúng không (là tên đăng nhập chứ không phải tên hiển thị). Mật khẩu có bị thu hồi chưa
Đáng lẽ đúng nhưng vẫn bị coi là chưa đăng nhập Có thể máy chủ không chuyển header Authorization cho PHP. Với Apache, hãy kiểm tra dòng RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] trong .htaccess của WordPress còn không
Chỉ một số URL bị lỗi Plugin bảo mật hoặc WAF có đang giới hạn REST API không

Các lỗi chung của REST API được giải thích trong "Cách sửa lỗi REST API".

Tắt mật khẩu ứng dụng

Với site không dùng, bạn có thể tắt cả chức năng. Hãy viết vào functions.php của theme hoặc một plugin tự viết.

<?php
// Tắt cho toàn site
add_filter( 'wp_is_application_passwords_available', '__return_false' );

Khi chỉ cho phép một số người dùng nhất định, hãy dùng bộ lọc theo từng người dùng. Ví dụ sau chỉ cho phép người dùng có quyền quản trị (manage_options).

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

Về cách giới hạn truy cập vào chính REST API, hãy xem "Cách giới hạn truy cập vào REST API".

Lưu ý khi vận hành

  • Hãy cấp mật khẩu riêng cho từng công cụ và đặt tên để biết mục đích. Khi bị lộ, bạn chỉ thu hồi phần của công cụ đó.
  • Hãy thu hồi ngay phần của những công cụ không còn dùng. Cái có thời điểm dùng gần nhất trong danh sách đã cũ có thể là cái không còn được dùng.
  • Hãy xem lại xem có thật sự cần trao mật khẩu của quản trị viên cho dịch vụ bên ngoài không, và hãy tạo bằng một người dùng chỉ có những quyền cần thiết.

Có câu hỏi về WordPress? Đơn vị xuất bản trang này ở Nhật Bản và trả lời bằng tiếng Nhật. Liên hệ (tiếng Nhật)

お気軽にご相談ください

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