Bitnami + WordPressでRESTのJSON Basic認証が突然機能しなくなったお話

順調にWordpressのRESTで遊んでいたのですが、
突然、認証が通らなくなりRESTでの記事が投稿できなくなりました。
何度やっても401のBad Requestが返ってきます。

全く同じユーザー名にパスワード、全く同じプログラムなのに

Sorry, you are not allowed to create posts as this user

と、突然知らない人扱い。かなりトラウマを植え付けられました。
原因を説明した後に、どうやって解消したかについてご説明します。

原因

原因は.htaccessにありました。
Bitnamiで作成したWordpressはデフォルトでは、.htaccessファイルがありません。

ls -la /opt/bitnami/apps/wordpress/htdocs/

とりあえず、あなたが今ドハマりしているのであれば確認してみてください。
.htaccessは存在しますか?そいつはやべーやつです。

howto-wordpress-json-basic-auth-dobon-01

これがある人は、おそらくこちらを変更しています。

sudo vi /opt/bitnami/apps/wordpress/conf/httpd-app.conf

Allow Override ALLになってると思います。
これBitnamiで作ったWordpressであればデフォルトNoneです。
僕も、Wordpressのログイン画面の場所を変更するためにここを弄っていました。

howto-wordpress-json-basic-auth-dobon-02

どうすれば良かったかというと、Allow OverrideはNoneのままで
以下のファイルを編集するのが正解でした。

sudo vi /opt/bitnami/apps/wordpress/conf/htaccess.conf

何故、突然動かなくなったか

理由は、.htaccessがあるタイミングで生成されたからです。
そのタイミングはパーマリンク設定の「変更を保存」ボタンを押したタイミングです。
パーマリンクを変更したかどうかは関係ありません。

  1. .htaccessが存在しない状態で認証がうまく行った
  2. しばらく運用
  3. パーマリンクの設定変更ボタンを押して.htaccessが突如現れた
  4. RewriteRuleが上書きされて折角Authorizationヘッダを有効にしたのに無効にされた

たぶんRESTの設定でこんなのを書いていると思います。

RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

こいつが無効にされてApacheがAuthorizationを受け取らなくなってしまっています。

対処方法

httpd-app.confでAllow Override をNoneにします。

sudo vi /opt/bitnami/apps/wordpress/conf/httpd-app.conf

.htaccessに記載していた内容をhtaccess.confに移動します。

sudo vi /opt/bitnami/apps/wordpress/conf/htaccess.conf

Apacheをリスタートします。

sudo /opt/bitnami/ctlscript.sh restart apache

たぶん動くと思います。
結局振り返ってみれば、
RESTのJSON BASIC認証でやるべきことは

  • プラグインを入れること
  • Authorizationヘッダを有効にすること
    の2点だけでした。

まとめ

勉強不足でした。反省。
しかし、そもそも何故ApacheはAuthorizationを取り除いてしまうのでしょうか。
よくわからん仕様です。

おわり

コメントを残す

メールアドレスが公開されることはありません。