2026年5月20日
2026年5月20日
WordPressのアプリケーションパスワードとは|発行・削除の手順とREST APIでの使い方
アプリケーションパスワードは、WordPress 5.6 で追加された、REST API や外部ツールに渡すための専用のパスワードです。本来のログインパスワードを教えずに済み、ツールごとに発行して、不要になったものだけを取り消せます。この記事では、使える条件、発行と削除の方法(管理画面・WP-CLI・PHP)、REST API での使い方、うまくいかないときの確認点を説明します。内容は、2026年11月時点で WordPress の開発者向けドキュメントとソースコードを確認したものです。
アプリケーションパスワードでできること・できないこと
- REST API と XML-RPC の認証に使えます。REST API では、ユーザー名とアプリケーションパスワードを Basic 認証で送ります。
- 管理画面へのログイン(wp-login.php)には使えません。人がログインするためのものではなく、プログラムやツールのためのものです。
- 権限は、発行したユーザーと同じです。管理者が発行すると、そのパスワードを持つツールは管理者と同じ操作ができます。投稿だけを任せたいなら、投稿者や編集者のユーザーを作って、そのユーザーで発行します。
- 1つずつ取り消せます。最後に使われた日時と IP アドレスも記録されます。
使える条件
アプリケーションパスワードは、標準では HTTPS のサイトか、環境の種類が local のサイトでだけ使えます。WordPress の判定は次のとおりです(wp_is_application_passwords_supported())。
return is_ssl() || 'local' === wp_get_environment_type();
HTTP のままのサイトでは、プロフィール画面に項目が表示されません。パスワードを暗号化されない通信で送ることになるためです。
管理画面で発行する
- 「ユーザー → プロフィール」を開きます(他のユーザーの分は「ユーザー → ユーザー一覧」から対象のユーザーを編集します)。
- 下の方にある「アプリケーションパスワード」の欄で、「新しいアプリケーションパスワード名」に用途が分かる名前(例: 投稿用スクリプト、Zapier)を入れます。
- 「アプリケーションパスワードを追加」を押します(バージョンによっては「新しいアプリケーションパスワードを追加」と表示されます)。
- 表示された 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
# 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 では -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 へのアクセスを制限する方法」を参照してください。
運用の注意点
- ツールごとに別のパスワードを発行し、名前で用途が分かるようにします。漏れたときにそのツールの分だけを取り消せます。
- 使わなくなったツールの分はすぐに取り消します。一覧で最後に使われた日時が古いものは、使われていない可能性があります。
- 管理者のパスワードを外部サービスに渡す必要があるかを見直し、必要な権限だけを持つユーザーで発行します。