セットアップしましたBasic Auth
は、関連するユーザーのみにアクセスを許可するブラウザー認証用のOpencartプロジェクト用です。さて、I need to use REST API for a mobile app
。 APIからエンドポイントを呼び出してOpnecartプロジェクトから詳細を取得する場合、APIからaccess_tokenを生成する必要があり、すべてのリクエストでそのaccess_tokenを使用することで、APIから詳細を取得できます。問題は、私がプロジェクト用に設定した基本認証であり、そのため、1つのメソッドしか使用できないためAPIにアクセスできず、opencartから詳細を取得するGETメソッドであるAPIにアクセスできないため、2つのメソッドを使用できません。つまり、Auth Header and GET methods
。そう、 what I am trying to do is to disable Basic Auth if the Request_URI includes api calls.
私がこれまでにプロジェクトのvhostで試したことは次のとおりですが、これはすべてうまくいきませんでした。
次の質問の受け入れられた答えからアイデアを得ましたが、私にとってはうまくいきませんでした。 https://stackoverflow.com/questions/8978080/htaccess-exclude-one-url-from-basic-auth?answertab=votes#tab-top
<Directory /var/www/html/projectexample>
AllowOverride All
# Auth stuff
AuthName "Authentication Required"
AuthType Basic
AuthUserFile /etc/Apache2/.htpasswd
Order allow,deny
Deny from all
Satisfy any
<RequireAny>
<RequireAll>
Require expr %{REQUEST_URI} =~ m#^/api/rest/.*#
</RequireAll>
Require valid-user
</RequireAny>
</Directory>
以下のようなSetEnvIf環境変数も使用しようとしましたが、うまくいきませんでした。
<Directory /var/www/html/projectexample>
AllowOverride All
# Auth stuff
AuthName "Authentication Required"
AuthType Basic
AuthUserFile /etc/Apache2/.htpasswd
SetEnvIf Request_URI "^/api/*" allow=1
#SetEnvIf Request_URI "^/(api/*)" allow=1
Order allow,deny
Require valid-user
Allow from env=allow
Deny from env!=allow
Satisfy any
</Directory>
解決策はありますか?
私のプロジェクトでSEO URLを有効にしているため、うまくいったソリューション:
<Directory /var/www/html/projectexample>
AllowOverride All
</Directory>
<Location "/">
# Default to Basic Auth protection for any stie
AuthType Basic
AuthName "Authentication required"
AuthUserFile /etc/Apache2/.htpasswd
Require valid-user
# If the request goes to a rest page: bypass basic auth
SetEnvIf Request_URI ^/api/ noauth=1
# gets REDIRECT_ prepended if the request is a redirect
Allow from env=REDIRECT_noauth
Allow from env=noauth
Order allow,deny
Satisfy any
Deny from env!=noauth
</Location>
Allow from env=REDIRECT_noauth
はSEO URLのためにここでトリックを行っています。
/var/www/html/projectexample
がドキュメントルートであり、/var/www/html/projectexample/api
が無制限のアクセスを許可するAPIディレクトリであるとすると、2つの<Directory>
コンテナを作成できます。例えば:
<Directory /var/www/html/projectexample>
AuthName "Authentication Required"
AuthType Basic
AuthUserFile /etc/Apache2/.htpasswd
Require valid-user
</Directory>
<Directory /var/www/html/projectexample/api>
Require all granted
</Directory>
より具体的な/api
<Directory>
コンテナは前者をオーバーライドします。
Apache 2.4以降を使用している場合、古いApache 2.2の認証ディレクティブ(Order allow,deny
など)と新しい<RequireAny>
etc.ディレクティブを混在させないでください。古いディレクティブは、下位互換性のためにのみ使用できます。 2つのタイプのディレクティブを混在させると、予期しない競合が発生する可能性があります。