CakePHP3:特定のコントローラをBasic認証の対象外にする

とある開発においてSMSの送信をすることがあり、SMSの事業者からコールバックを受ける必要がでてきました。 開発環境でBASIC認証をかけているので、コールバックを受けるURLだけを開放したい。 だけどCakePHPでは.htaccessによってURLをrewriteしているので一筋縄ではいきません。

色々調べた結果、以下の記述で動くことがわかりました:

<Location "/">
AuthType     Basic
AuthName     "hogehoge"
AuthUserFile /etc/httpd/conf/.htpasswd
Require      valid-user

SetEnvIf Request_URI ^/Callback noauth=hoge
Allow from env=REDIRECT_noauth
Allow from env=noauth

Order Deny,Allow
Satisfy any
Deny from all
</Location>

まだ理解が浅いのですがこんな原理です:

  • /Callbackをアクセスすると、noauth=hogeが設定される
  • その後、RewriteRuleによりURLが書き換わり、noauthの値はREDIRECT_noauthにセットされる
  • Satisfy Anyがあるので、パスワードを入れなくても/Callbackであれば通過する

と言った具合です。