WordPress REST APIが401・403になる原因:Application Passwordの切り分け手順【2026年】

当サイトはアフィリエイト広告を利用しています。 本記事は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だけ遮断している
  • 最初から画像・カテゴリ・タグまで含む巨大なリクエストを試している

最短の切り分け順

  1. /wp-json/ が開く
  2. /users/me?context=edit が200
  3. 最小draft投稿が成功
  4. カテゴリー・タグ追加
  5. メディア追加
  6. 自動化スクリプト本体へ戻す

この順なら「WordPressが悪いのか」「認証が悪いのか」「投稿データが悪いのか」を混ぜずに調べられます。

公式情報

コメント

タイトルとURLをコピーしました