Аутентифицировать каталог Apache через PHP - PullRequest
1 голос
/ 08 марта 2011

Добрый день всем,

У меня есть каталог, созданный с помощью Apache Auth. Вот каталог: http://gojalapeno.com/intranet/content/ado-jeune

Используйте ado-jeune: tezesyrab для входа.

Вот код для .htaccess, который его поддерживает:

AuthName "Connexion au dossier:"
AuthType Basic
AuthUserFile "D:\Dropbox\htaccess\secret\.htpasswd"
Require valid-user

Теперь форма входа в этот каталог создается браузером, но я хочу использовать для этого свою собственную HTML-форму. Как мне это сделать? Я пытался использовать cURL с PHP:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://gojalapeno.com/intranet/content/ado-jeune');
curl_setopt($ch, CURLOPT_USERPWD, 'ado-jeune:tezesyrab');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
curl_close($ch);

Это аутентифицирует нормально, но проблема в том, что он не перенаправляет на страницу (несмотря на CURLOPT_FOLLOWLOCATION), он просто «включает» его в текущий файл. Таким образом, все мои относительные ссылки не работают.

Итак, я ищу способ использовать мою собственную HTML-форму для аутентификации в каталоге Apache Basic Auth и для перенаправления в этот каталог после.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 10 марта 2011

К сожалению, то, что вы описываете, будет трудно реализовать из-за того, как работает AuthBasic.Из документации Apache :

Из-за способа, которым указана обычная аутентификация, ваше имя пользователя и пароль должны проверяться каждый раз, когда вы запрашиваете документ с сервера.Это даже если вы перезагружаете одну и ту же страницу и для каждого изображения на странице (если они поступают из защищенного каталога).

Браузеры обрабатывают автоматическую отправку учетных данных пользователя для каждого последующего запроса послепользователь вводит их в.

Но в вашем случае, сам браузер не подключается к защищенному каталогу, а скорее cURL.Одним из решений было бы, чтобы cURL обрабатывал все запросы к этому защищенному каталогу, в сущности действуя как прокси.

Для этого вам нужно написать сценарий PHP, который запрашивает учетные данные пользователя и отправляет их вместе какон запрашивает страницу в защищенном каталоге.Так что-то вроде этого:

<?php

    // This is *very* basic - you would of course need to make sure the user 
    // isn't trying to access something in another location
    $dest = $_GET["dest"];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://gojalapeno.com/intranet/content/' . $dest);

    // You would retrieve the user's credentials from an HTML form and save them in session vars
    curl_setopt($ch, CURLOPT_USERPWD, $_SESSION["username"] . ":" . $_SESSION["password"]);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

    curl_exec($ch);

    curl_close($ch);

?>

Надеюсь, это поможет!

0 голосов
/ 08 марта 2011

Может быть, вы можете определить свой собственный документ об ошибке, который включает в себя форму в .htaccess:

ErrorDocument 401 /my_custom_password_form.html

См. http://httpd.apache.org/docs/2.0/custom-error.html

...