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 のままのサイトでは、プロフィール画面に項目が表示されません。パスワードを暗号化されない通信で送ることになるためです。

管理画面で発行する

  1. 「ユーザー → プロフィール」を開きます(他のユーザーの分は「ユーザー → ユーザー一覧」から対象のユーザーを編集します)。
  2. 下の方にある「アプリケーションパスワード」の欄で、「新しいアプリケーションパスワード名」に用途が分かる名前(例: 投稿用スクリプト、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

# 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 へのアクセスを制限する方法」を参照してください。

運用の注意点

  • ツールごとに別のパスワードを発行し、名前で用途が分かるようにします。漏れたときにそのツールの分だけを取り消せます。
  • 使わなくなったツールの分はすぐに取り消します。一覧で最後に使われた日時が古いものは、使われていない可能性があります。
  • 管理者のパスワードを外部サービスに渡す必要があるかを見直し、必要な権限だけを持つユーザーで発行します。

お気軽にご相談ください

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