Аутентификация

Если web-сервер нуждается в контроле доступа, то в настоящее время (в HTTP/1.1) имеется две возможности. Первая (basic) - предполагает традиционный ввод и передачу по сети имени клиента и пароля. Эта схема проста, но допускает перехват параметров доступа (а между клиентом и сервером может быть достаточно много промежуточных узлов). Вторая схема (digest) для пользователя выглядит аналогично, но вводимое имя и пароль не передаются по сети непосредственно. На их базе формируется дайджест MD5, который пересылается по сети и используется для идентификации клиента.

 

Алгоритм аутентификации:

 
 

 

 


  1. Аутентификация начинается в тот момент, когда пользователь запрашивает URL, защищенный схемой НТТР-аутентификации.
  2. Web-сервер возвращает код состояния 401 и заголовок WWW-Authenticate, что говорит о том, что для доступа требуется аутентификация. Заголовок WWW-Authenticate содержит тип аутентификации и имя области доступа.
  3. Появляется диалоговое окно Web-браузера, запрашивающее имя пользователя и пароль.
  4. Пользователь вводит имя и пароль, которые вместе с запрошенным ранее 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.

  1. Необходимо создать несколько записей в файле паролей. Этого можно достичь, не указывая ключа -c для htpasswd:

 

htpasswd /otherdir/.htpasswd peanuts
htpasswd /otherdir/.htpasswd almonds
htpasswd /otherdir/.htpasswd walnuts

 

  1. Создать файл описания группы, назвав его, например, /otherdir/.htgroup со следующим содержимым:

 

my-users: pumpkin peanuts almonds walnuts

 

где my-users - имя группы, pumpkin, peanuts, almonds, walnuts - список пользователей, входящих в группу.

  1. Изменить файл .htaccess следующим образом:

 

AuthUserFile /otherdir/.htpasswd
AuthGroupFile /otherdir/.htgroup
AuthName ByPassword
AuthType Basic
<Limit GET>
require group my-users
</Limit>

 

Все документы данного каталога будут доступны всем членам группы my-users после проведения процедуры аутентификации (ввода пароля).