ワードプレス「Application Passwords」でREST APIの403・401エラー原因と対処方法

WordPressで「Application Passwords」を使ってRESTAPIをリクエストして自動投稿に取り組んだところ、403のForbiddenエラーや401の認証エラーに遭遇しました。

そこで、「Application Passwords」による自動投稿の注意点とエラーの対処方法を解説します。

REST APIでワードプレスを操作

ブログCMSで最も利用されているワードプレスには、REST APIが用意されています。

通常のワードプレス操作はブラウザで管理画面にアクセスして記事を投稿したり、アプリで記事を書くのが一般的です。

ただ、REST APIを利用すれば、pythonやjavascriptといったプログラミング言語でワードプレスを操作することができます。

以前、Google Apps Script(GAS)でワードプレスのREST APIを使用して記事を投稿する方法を紹介しました。

GASでワードプレスを自動投稿する方法~REST APIによる記事の新規作成手順

このようにワードプレスのREST APIを使って、各種操作をスクリプトで実行可能です。

REST API利用は「Application Passwords」のプラグイン必須

ワードプレスでREST APIを利用するにあたっては事前に必要なプラグインがあります。

それが「Application Passwords」というプラグインです。

ワードプレスのAPIを利用するため、「Application Passwords」のプラグインをインストールする

このApplication PasswordsプラグインでREST API実行可能なユーザーを登録します。

REST APIではワードプレスの色々な操作ができるため、APIリクエスト可能なユーザーを制限しておかないと、セキュリティーリスクがあるためです。

ワードプレスでREST APIを利用するにあたっては、プラグインの新規追加でApplication Passwords をインストールし、REST APIを許可するユーザー設定が必要です。

Application Passwordsで403や401エラーが発生

ただ、ワードプレスのApplication Passwordsをインストールし、ユーザー設定も完了したけど、PythonやJavascriptなどでREST APIを実行したけれども、403のアクセス禁止エラーや401の認証エラーでAPIリクエストに失敗することがあります。

ワードプレスのREST APIにはいくつか実行エラーになるポイントがあります。

それぞれのエラー原因と対応方法を紹介します。

Application Passwordsのエラー原因と対処方法

Application Passwordsプラグイン導入後に、REST APIリクエストでエラーしてしまうよくある原因は3つ挙げられます。

  1. レンタルサーバーの.htaccessのファイルの記述不足
  2. Application Password登録ユーザーがワードプレスユーザーと一致しない
  3. レンタルサーバーで海外サーバーからREST API実行を不許可

Application Passwordsのエラー原因となる主な3つについて対処方法を解説します。

レンタルサーバーの.htaccessのファイルの記述不足

Application Passwordsのエラーで最も多いのが.htaccessファイルの記述が不足しているケースです。

ワードプレスのApplication Passwordsの画面で下記のエラーが出ている場合は、本事象に該当します。

ユーザープロフィールの「Application Passwords」で画像のようなエラーメッセージが表示されている場合は、ワードプレスサーバーの.htaccessを修正する必要がある

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.

レンタルサーバーでワードプレス運用している場合、アクセスなどの各種Web設定を行う.htaccessファイルがあります。

この.htaccessのファイルにHTTPアクセスの認証を許可するための記述を1行追加する必要があります。

RewriteRule .* – [E=REMOTE_USER:%{HTTP:Authorization}]

※ApacheのWebサーバーの場合のみ

.htaccessに「RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]」を追加して、ワードプレスAPIのリクエストが許可されるようにする

.htaccessに上記の記述がない状態だと、Application Passwordsのプラグイン画面でエラーメッセージが表示されます。

上記エラーが発生している場合は、この.htaccessの設定不足なので、レンタルサーバーを利用している場合は、追記しましょう。

.htaccessの修正して、ワードプレスのApplication Passwordsの画面でエラーが表示されなくなったら、対応完了です。

Application Passwords登録ユーザーがワードプレス管理ユーザーと一致しない

Application Passwordsのプラグインでは、REST APIをリクエストできるユーザーを登録し、パスワードを生成します。

このユーザー名では任意のユーザー名が入力できるのですが、ワードプレスに登録されているユーザー名と同一にしなければなりません。

同一名のユーザーでなければ、REST APIをリクエストした際に認証エラーが生じて失敗します。

ワードプレスのREST APIをリクエストすると、401の認証エラーが返ってきます。

そのため、ワードプレスの登録ユーザー名と一致しているか確認し、一致していない場合は、同じユーザー名で再作成しましょう。

レンタルサーバーで海外サーバーからREST API実行を不許可

Application Passwordsのユーザー設定も.htaccessファイルの設定も問題ないのに、REST APIリクエストでエラーするケースで考えられるのが、海外サーバーからのアクセス制限です。

特にAWSのLambdaやGoogleのCloud Function、Google Apps ScriptなどのサーバーレスのスクリプトサービスでREST APIを実行する際、実行元は海外のサーバーになります。

レンタルサーバーでは不正な海外アクセスを防ぐために海外ドメインからのREST APIのリクエストを制限しているケースが多いです。

もし、REST APIリクエストの実行元の環境が海外サーバーや海外サービスの場合は、レンタルサーバーの設定が原因である可能性が高いです。

このときワードプレスのREST APIをリクエストすると、403のアクセス禁止エラーが返ってきます。

Xserverやスターサーバーなどの一般的なレンタルサーバーではWordpressセキュリティー設定として、海外IPからアクセス制限の項目がありますので、アクセス制限を無効にしましょう。

○XserverのWordpressセキュリティ設定

XserverでREST APIを無効化することでGoogle Apps Script(GAS)でAPIリクエストが可能になる。

○スターサーバーのWordpressセキュリティ設定

スターサーバーでREST APIの国外アクセス制限を無効化し、Google Apps Script(GAS)からAPIリクエストできるようにする

以上の3つがApplication Passwordsに関わる部分でのREST APIリクエストの主なエラー原因です。

他にパスワードが誤っているなどのケアレスミスもありますが、Application Passwordがうまく行かない場合は上記3つに該当しないか確認しましょう。

まとめ・終わりに

今回、ワードプレスのREST APIに必要なプラグイン「Application Passwords」で、REST APIリクエストが401や403エラーを引き起こす原因を紹介しました。

主にApplication Passwordsのユーザー設定や.htaccess、レンタルサーバーの海外IP制限の3つがエラー原因であることが多いです。

Application Passwordsのプラグインをインストール後に、うまくワードプレスのREST APIがリクエストできない場合は上記のエラー原因に該当しているか確認しましょう。

3つのエラー原因のうち複数が該当しているケースもあるので、3つとも問題ないかチェックしておくのがおすすめです。