Как обойти аутентификацию htpasswd на определенном маршруте - PullRequest
0 голосов
/ 15 февраля 2019

mi сайт имеет apache-авторизацию, но мне нужно разрешить доступ к определенному URL-запросу.Этот URL-запрос не представляет существующий файл или каталог.

Это мой .htaccess:

Сначала я попробовал этот подход:

AuthName "Required login"
AuthType Basic
AuthUserFile C:\path\to\apache\.htpasswd
Require expr %{REQUEST_URI} =~ ^specialUrl$
Require valid-user

Это дает мне внутреннюю ошибку сервера 500

Я пытался:

%{REQUEST_URI} == ^specialUrl$
"%{REQUEST_URI} =~ ^specialUrl$"

Я не уверен, как выражение должно быть оценено.Я предполагаю, что у меня есть синтаксическая ошибка.

Второй подход:

Как я видел на этот другой ответ Я попытался установить переменную env

## Grant access to webhook uri
SetEnvIf Request_URI ^/specialUri noauth=1

## Auth config
AuthName "Required login"
AuthType Basic
AuthUserFile C:\path\to\apache\.htpasswd
Require valid-user

## Allow Deny
Order Deny,Allow
Satisfy any
Deny from all
Allow from env=noauth

Это привело к ошибке 401 Аутентификация требуется, когда я POST с http-клиента.

Требуется аутентификация!

Этот сервер не может проверить, что вы авторизованы дляполучить доступ к URL-адресу "/ specialUri".Вы либо ввели неверные учетные данные (например, неверный пароль), либо ваш браузер не понимает, как предоставить требуемые учетные данные.

Если вам разрешено запрашивать документ, проверьте свой идентификатор пользователя и пароль и повторите попытку.

.htaccess файл:

## Grant access to webhook uri
SetEnvIf Request_URI "\specialUri" noauth

## Auth config
AuthName "Required login"
AuthType Basic
AuthUserFile C:\path\to\.htpasswd

## Allow Deny
Order Deny,Allow
Satisfy any
Deny from all
Require valid-user
Allow from env=noauth


<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    RewriteCond %{HTTP:Authorization} ^(.*)
    RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
</IfModule>

1 Ответ

0 голосов
/ 19 февраля 2019

Я не очень понимаю, почему, но мне показалось, что на моем сайте произошло перенаправление.Это было исправлено, добавив еще одну директиву allow:

AuthType Basic
AuthName "Required login"
AuthUserFile C:\path\to\.htpasswd
Require valid-user
SetEnvIf Request_URI "mySpecialUri$" allow
Order deny,allow
Deny from all
Allow from env=webhook
Allow from env=REDIRECT_noauth
Allow from 127.0.0.1
Satisfy any

Обратите внимание, что SetEnvIf Request_URI "mySpecialUri$" использует последнюю часть URI.Это потому, что перенаправление, о котором я упоминал, генерировало более длинный URI.

Allow from env=REDIRECT_noauth устранил проблему

...