Аутентификация
Если web-сервер нуждается в контроле доступа, то в настоящее время (в HTTP/1.1) имеется две возможности. Первая (basic) - предполагает традиционный ввод и передачу по сети имени клиента и пароля. Эта схема проста, но допускает перехват параметров доступа (а между клиентом и сервером может быть достаточно много промежуточных узлов). Вторая схема (digest) для пользователя выглядит аналогично, но вводимое имя и пароль не передаются по сети непосредственно. На их базе формируется дайджест MD5, который пересылается по сети и используется для идентификации клиента.
Алгоритм аутентификации:
- Аутентификация начинается в тот момент, когда пользователь запрашивает URL, защищенный схемой НТТР-аутентификации.
- Web-сервер возвращает код состояния 401 и заголовок WWW-Authenticate, что говорит о том, что для доступа требуется аутентификация. Заголовок WWW-Authenticate содержит тип аутентификации и имя области доступа.
- Появляется диалоговое окно Web-браузера, запрашивающее имя пользователя и пароль.
- Пользователь вводит имя и пароль, которые вместе с запрошенным ранее URL пересылаются серверу. Сервер проверяет достоверность имени и пароля.
5. а) Если имя пользователя и пароль правильны, сервер возвращает запрашиваемую страницу.
б) Если имя пользователя и пароль неверны, сервер возвращает код состояния 401 и посылает браузеру прежний заголовок WWW-Authenticate.
В каждом последующем запросе на протяжении сеанса работы браузера с тем же сервером браузер будет посылать пару «имя пользователя – пароль», чтобы сервер не генерировал код состояния 401 при обращениях к той же области узла.
Для введения ограничений на доступ ко всем документам определенного каталога необходимо создать в этом каталоге файл управления доступом. Этот файл имеет фиксированное имя, определяемое параметром AccessFileName файла конфигурации доступа. По умолчанию, это файл .htaccess.
Пример содержимого файла .htaccess
AuthUserFile /otherdir/.htpasswd
AuthGroupFile /dev/null
AuthName ByPassword
AuthType Basic
<Limit GET>
require user pumpkin
</Limit>
AuthUserFile указывает путь файла паролей, который должен находиться вне данного каталога.
Limit GET ограничивает доступ по методу GET, предоставляя его только пользователю pumpkin. Для ограничения других методов доступа (например, в каталогах CGI) используется перечисление всех методов:
<Limit GET POST PUT>
require user pumpkin
</Limit>
Для создания файла паролей необходимо воспользоваться утилитой htpasswd, входящей в состав дистрибутива сервера:
htpasswd -c /otherdir/.htpasswd pumpkin
После запуска она дважды запросит пароль для пользователя pumpkin и создаст файл паролей /otherdir/.htpasswd.
Все последующие пользователи создаются без ключа -с.
Использование нескольких пар имя/пароль
Использование нескольких пар имя/пароль достигается путем описания группы, в которую входят несколько пользователей, и указания имени группы в директиве Limit.
- Необходимо создать несколько записей в файле паролей. Этого можно достичь, не указывая ключа -c для htpasswd:
htpasswd /otherdir/.htpasswd peanuts
htpasswd /otherdir/.htpasswd almonds
htpasswd /otherdir/.htpasswd walnuts
- Создать файл описания группы, назвав его, например, /otherdir/.htgroup со следующим содержимым:
my-users: pumpkin peanuts almonds walnuts
где my-users - имя группы, pumpkin, peanuts, almonds, walnuts - список пользователей, входящих в группу.
- Изменить файл .htaccess следующим образом:
AuthUserFile /otherdir/.htpasswd
AuthGroupFile /otherdir/.htgroup
AuthName ByPassword
AuthType Basic
<Limit GET>
require group my-users
</Limit>
Все документы данного каталога будут доступны всем членам группы my-users после проведения процедуры аутентификации (ввода пароля).