当サイトはアフィリエイト広告を利用しています。 本記事は2026年8月時点のWordPress公式ドキュメントを基に整理しています。
WordPress REST APIをApplication Passwordで使ったときの 401 Unauthorized / 403 Forbidden は、投稿コードを何度も書き直すより、REST API → 認証 → 権限 → WAF → 投稿の順で切り分ける方が早いです。
最初に投稿処理をテストしないのがポイントです。まず「そのユーザーとして認証できているか」だけを確認します。
401と403の基本的な違い
| HTTP | WordPressでまず疑うもの |
|---|---|
| 401 | 未認証、認証情報の間違い、Authorizationヘッダー欠落 |
| 403 | 認証後の権限不足、WAF/セキュリティ制限、REST API制限 |
WordPress coreにも、権限エラー時に「未ログインなら401、ログイン済みなら403」を返す考え方があります。ただしPluginやWAFが独自レスポンスを返す場合もあるため、HTTPコードだけで原因を断定しません。
STEP 1:REST API自体が生きているか
まずブラウザで次を開きます。
https://example.com/wp-json/
JSONが表示されれば、少なくともWordPress REST APIの入口には到達しています。404やサーバー独自のブロック画面なら、Application Password以前の問題です。
STEP 2:Application Passwordで /users/me を確認
WordPress公式は、Application Passwordを外部アプリやスクリプト用のユーザーごと・用途ごとに失効できる認証情報として提供しています。通常のwp-adminログインパスワードとは別物です。
curl --user "USERNAME:APPLICATION_PASSWORD"
https://example.com/wp-json/wp/v2/users/me?context=edit
ここで200と自分のユーザー情報が返るなら、Application PasswordによるBasic認証は通っています。
Application Passwordの作成方法から確認する場合は、Application PasswordでREST APIから記事を下書き保存する方法を先に確認してください。
STEP 3:401ならこの順で確認
通常のログインパスワードを使っていないか
APIには生成したApplication Passwordを使います。WordPressが画面上でスペース区切り表示しても、認証時はスペースあり・なしのどちらでも扱えます。
ユーザー名が正しいか
記事に表示される「表示名」ではなく、認証対象WordPressユーザーのログイン名を使います。
HTTPSか
Application PasswordはHTTPSで使うのが前提です。HTTPのまま本番利用しないでください。
AuthorizationヘッダーがPHPまで届いているか
WordPress公式のトラブルシューティングでも、HTTPクライアントやProxyが Authorization ヘッダーを落とす可能性が挙げられています。
「同じ認証情報なのにローカルでは通る、特定サーバーだけ401」という場合は特に疑います。
STEP 4:403なら権限とセキュリティ層を確認
投稿できる権限のユーザーか
/users/me が通っても、対象ユーザーに投稿作成・編集権限がなければ投稿endpointは拒否されます。
WAF・セキュリティPlugin
WAFやセキュリティPluginがREST API、Basic Auth、POSTリクエスト、特定JSONをブロックすることがあります。無差別に全部OFFにするのではなく、ログやブロック理由を確認して対象を絞ります。
REST API制限設定
サイト独自コードやPluginでREST APIを未ログイン利用不可にしたり、Application Password自体を無効にしているケースもあります。
STEP 5:最小のdraft投稿だけ試す
認証が通ったら、カテゴリ・タグ・画像を全部外した最小投稿を試します。
POST /wp-json/wp/v2/posts
Content-Type: application/json
{
"title": "REST API test",
"content": "<p>test</p>",
"status": "draft"
}
これが成功したら、カテゴリー → タグ → カスタムフィールド → 画像アップロードのように1要素ずつ戻します。失敗した瞬間に原因候補が限定できます。
よくある失敗パターン
- 表示名をユーザー名として使った
- 通常ログイン用パスワードをAPIへ渡した
- Application Passwordを作ったユーザーと投稿させたいユーザーが違う
- HTTPクライアントがAuthorizationヘッダーを送っていない
- WAFがPOSTだけ遮断している
- 最初から画像・カテゴリ・タグまで含む巨大なリクエストを試している
最短の切り分け順
/wp-json/が開く/users/me?context=editが200- 最小draft投稿が成功
- カテゴリー・タグ追加
- メディア追加
- 自動化スクリプト本体へ戻す
この順なら「WordPressが悪いのか」「認証が悪いのか」「投稿データが悪いのか」を混ぜずに調べられます。

コメント