Apache2: Исключите все остальные API Request_URIs от Основного Автора путем соответствия некоторым выражениям

У меня есть установка 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>

Какие-либо решения?

1
задан 6 January 2019 в 03:53

2 ответа

Решение, которое удалось для меня, потому что мне включили 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.

1
ответ дан 7 December 2019 в 13:19

Принятие /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> и т.д. директивы. Старые директивы только доступны для назад совместимости только. Смешивание двух типов директив может привести к неожиданным конфликтам.

1
ответ дан 7 December 2019 в 13:19

Другие вопросы по тегам:

Похожие вопросы: