こんにちは、AIシステムズです。
この記事は、代表コバが現場で対応してきたWordPress連携開発の知見をもとに、AIを活用して構成・執筆し、弊社にて最終チェックを行ったものです。
外部システムや業務アプリからWordPressにAPI接続したら「401 Unauthorized」「rest_cookie_invalid_nonce」「Sorry, you are not allowed to …」など認証系のエラーが返ってくる——基幹システムとWordPressを連携させる構成でほぼ必ず通る関門です。WordPressのAPI認証は方式が複数あり、用途に合っていないものを使うとどう設定してもエラーが続くのが厄介な点です。
- WordPressのAPI認証方式の全体像
- Application Passwordの正しい使い方
- Cookie認証とNonceの仕組み
- JWT認証を使うべきケース
- 権限不足エラー(rest_forbidden)の見分け方
目次
- WordPress API認証エラーの分類
- 認証方式の使い分け
- Application Passwordの設定手順
- 権限不足エラーの対処
- こういうサイトに向いている/向いていない
- 再発防止チェックリスト
WordPress API認証エラーの分類
弊社が外部システム連携で対応してきた中で、認証エラーは次のパターンに集約されます。
401 Unauthorized:認証情報そのものが届いていない・誤っているrest_cookie_invalid_nonce:Cookie認証でNonceが期限切れか不正rest_forbidden:認証はできているが権限が足りないrest_not_logged_in:認証情報がそもそも付いていない
ブラウザの開発者ツールまたは curl の -v オプションで、送信されている Authorization ヘッダーの中身と、レスポンスの code フィールドを確認するのが第一歩です。
認証方式の使い分け
- Cookie認証 + Nonce:WordPress管理画面と同じドメインのJSから叩く場合の標準
- Application Password:外部システム・スクリプトから叩く場合の第一選択。WP 5.6以降の標準機能
- JWT認証:SPAやモバイルアプリでステートレスに認証したい場合。プラグインが必要
- OAuth 2.0:複数の外部サービスからユーザー権限で接続させる場合。プラグインが必要
外部システムからAPIを叩くのに古い「Basic認証プラグイン」を使い続けているケースがいまだに多いですが、これはWordPress 5.6以降では非推奨です。Application Passwordへ移行します。
Application Passwordの設定手順
1. WordPress側でアプリ用パスワードを発行
管理画面の「ユーザー → 自分のプロフィール」または「ユーザー一覧 → 該当ユーザー編集」画面下部に「アプリケーションパスワード」セクションがあります。アプリ名を入力して「新しいアプリケーションパスワードを追加」を押すと、24文字のパスワードが表示されます(この画面を閉じると二度と表示されません)。
2. クライアント側からの呼び出し
curl -u username:xxxx-xxxx-xxxx-xxxx-xxxx-xxxx \
https://example.com/wp-json/wp/v2/posts
PHPからの呼び出し例:
$auth = base64_encode('username:xxxx-xxxx-xxxx-xxxx-xxxx-xxxx');
$ch = curl_init('https://example.com/wp-json/wp/v2/posts');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Basic ' . $auth,
]);
3. うまくいかないとき
- Apache + mod_phpの構成では、
AuthorizationヘッダーがPHPに渡らないことがある。.htaccessでSetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1を追加 - ApplicationPasswordsを管理画面で発行できない場合、SSL(HTTPS)でアクセスしているか確認。HTTPでは発行画面が出ないことがある
- サイトのSSL証明書が無効・期限切れだと、外部からの接続が失敗
権限不足エラー(rest_forbidden)の対処
認証は通っているのに rest_forbidden が返る場合は、そのユーザーに該当エンドポイントの権限がありません。
- 投稿の編集APIには
edit_posts権限(編集者以上)が必要 - ユーザー一覧の取得には
list_users権限(管理者)が必要 - カスタム投稿タイプのAPIには、対応する
capability_typeの権限が必要
連携用のユーザーロールを必要最小限の権限に絞って専用に作るのがセキュリティ上の定石です。「Members」プラグインなどでカスタムロールを作り、API連携専用ユーザーに割り当てます。
こういうサイトに向いている/向いていない
このAPI認証整備は、基幹システム・業務アプリとWordPressを連携させたい中小企業や、外部のSaaSとWordPressをつなぐ構成に直接効きます。WordPress内で完結する一般的なコーポレートサイトには不要です。
再発防止チェックリスト
- 用途に合った認証方式を選んでいるか(外部連携はApplication Password)
- HTTPSでアクセスしているか
- Authorizationヘッダーがサーバー側まで届いているか
- 連携用ユーザーの権限が必要最小限に絞られているか
- 本番のApplication Passwordがソースコードリポジトリに混入していないか
まとめ
WordPressのAPI認証エラーは、認証方式の選定ミスと権限不足の2つに集約されます。外部連携はApplication Password、サイト内JSはCookie+Nonceと用途で使い分け、レスポンスJSONの code フィールドを見て切り分ければ短時間で解消できます。
本記事は、代表コバが中小企業のWordPress連携開発の現場で対応してきた知見をもとに、AIを活用して構成・執筆し、弊社にて最終確認を行っています。基幹システムとのAPI連携、外部SaaSとの接続、認証設計の見直しについて、具体的な状況をふまえた相談を承っています。費用感だけ知りたい方も、お気軽にご相談ください。