У меня есть установка Basic Auth
для проекта Opencart для аутентификации браузера, чтобы предоставить доступ соответствующим пользователям только. Теперь, I need to use REST API for a mobile app
. Когда я называю конечную точку от API для получения некоторых деталей от Проекта Opnecart, это требует, чтобы access_token был сгенерирован от API и при помощи того access_token с каждым запросом, я могу получить детали от API. Проблемой является Основной Автор, что у меня есть установка для проекта, и из-за этого я не могу получить доступ к API, поскольку я могу только использовать 1 метод для доступа к API, который является, ЗАСТАВЛЯЮТ метод получать детали от opencart, я не могу использовать 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>
Какие-либо решения?
Решение, которое удалось для меня, потому что мне включили URL SEO в моем проекте:
<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
добивается цели здесь для URL SEO.
Принятие /var/www/html/projectexample
Ваш корень документа и /var/www/html/projectexample/api
каталог API, который Вы хотите предоставить неограниченному доступу, затем можно просто создать два <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>
и т.д. директивы. Старые директивы только доступны для назад совместимости только. Смешивание двух типов директив может привести к неожиданным конфликтам.