WordPress WP API このユーザーとして投稿を編集する権限がありません。

WordPress WP API このユーザーとして投稿を編集する権限がありません。

WordPressのWP APIで記事を作成しようとリクエストを投げたとき、401レスポンスで「このユーザーとして投稿を編集する権限がありません。」とエラーメッセージが返却される場合の原因と対処方法です。

エラーの原因

このユーザーとして投稿を編集する権限がありません。
このエラーは複数の原因が考えられ、必ずしもメッセージ通りの意味ではありません。

WordPressの認証が失敗した場合に返されるメッセージで、以下のケースがあります。

  • ID・パスワードが間違っている
  • 認証方法が有効になっていない
  • 認証方法が有効になっているが、サーバーがCGIまたはFastCGIモードのPHPで構成されている

認証方法が有効になっていない

ハマりやすいのがこちらのケースです。

WordPress 4.7以降はデフォルトでREST APIが使用できるようになっています。
URLにwp-json/wp/v2/postsを付けてアクセスすれば、何も設定しなくても記事情報をjsonで参照できます。
それならあとは管理画面に入る認証情報で入れるのかな?と思い込みがちです。

WordPressのAPIは、データの参照はデフォルトで有効になっていますが追加・更新する場合は認証設定を行う必要があります。

認証方法

認証方法は3種類用意されています。

公式サイト

  1. クッキー認証
    管理画面のログインに使用されている認証で、REST API が WordPress の内部から使われていて、 かつ、ユーザーがログインしている時のみ使用可能な認証のため、プログラムからAPIを実行するケースではまず使いません。
  2. OAuth認証
    別途OAuth pluginを事前にインストールする必要があります。
    設定や認証方法が少々複雑になりますが、大抵の言語で有志がこの認証方式に対応したライブラリを作ってくれているので、そちらを使うとスムーズです。
  3. アプリケーションパスワードまたはベーシック認証
    アプリケーションパスワードは、別途Application Passwords pluginをインストールする必要があります。
    ベーシック認証は、別途Basic Auth pluginをインストールする必要があります。
    これらの認証方式はOAuth認証と比べると簡単ですが、全てのリクエストにID・パスワードの認証情報を付けるため、公式からも本番環境で利用することは推奨されていません。
    また、SSLを取得せずhttps通信ではなくhttpで通信していると、暗号化されずに生のパスワードがネットワーク上を流れることになるため、絶対にNGです。

認証方法が有効になっているが、サーバーがCGIまたはFastCGIモードのPHPで構成されている

BASIC認証やApplication Passwordsでユーザーページに以下のエラーが表示されている場合、WordPressを実行しているPHPの種類が理由で認証情報が上手く受け渡せない状態になります。

Due to a potential server misconfiguration, it seems that HTTP Basic Authorization may not work for the REST API on this site: `Authorization` headers are not being sent to WordPress by the web server. You can learn more about this problem, and a possible solution, on our GitHub Wiki.

この場合は、.htaccessにREMOTE_USERパラメータにAuthヘッダーをセットするように以下のように追記します。

# BEGIN WordPress

RewriteEngine On
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

再度ページを更新し、エラーが表示されなくなればOKです。

結局どれを選べばいい?

セキュリティの強度から、
・仕事であればOAuth認証にすべき。
・個人ブログなどの趣味ならSSL取得済みのhttps通信でアプリケーションパスワードも可
・重要度に応じてOAuth認証にする
というのが基準になります。uuuuukkjgfkk

ツールカテゴリの最新記事