Після того як ви створили свій сервер WebDAV, ви, ймовірно, хочете зробити його безпечним. Аутентифікація в WebDAV проводиться за допомогою базової або дайджест- HTTP-аутентифікації (RFC2617). Хоча її нескладно реалізувати самостійно, SabreDAV надає деякі засоби, які можуть полегшити вашу працю.
SabreDAV поставляється з плагіном, який виробляє для вас аутентифікацію. Він включає в себе два бекенда. Один для зберігання призначених для користувача логінів в файлі, інший - для зберігання їх в базі даних SQLite або MySQL. Обидва використовують HTTP-дайджест. Якщо ви хочете використовувати базову аутентифікацію, ви повинні створити власний клас Backend, який реалізує Sabre \ DAV \ Auth \ Backend \ BackendInterface.
Використання бекенда PDO
Бекенда PDO може використовувати тільки бази даних MySQL або SQLite. Приклади створення таблиць ви можете знайти в исходниках в директорії examples / sql:
Після створення екземпляра Sabre \ DAV \ Server. включите обговорюваний плагін за допомогою наступного коду:
Таблиця SQL
Скрипти в прикладах для SQL автоматично створюють користувача з логіном admin і паролем admin. Змініть його!
Вас може збентежити поле digesta1. У ньому зберігається хеш пароля. Цей хеш обчислюється таким чином:
З логіном і паролем все зрозуміло, але крім них ви повинні десь зберігати realm. Це той же самий realm. яку ви вказали раніше, коли створювали Sabre \ DAV \ Auth \ Plugin.
Якщо ви захочете змінити realm в плагіні, всі існуючі паролі стануть недійсними, оскільки зміниться їх хеші.
Використання файлового бекенда
Бекенда Sabre \ DAV \ Auth \ Backend \ File використовує простий файл для зберігання призначених для користувача логінів і паролів. Формат цього файлу ідентичний файлу htdigest, використовуваного в Apache.
Якщо у вас встановлений Apache, то, швидше за все, у вас є утиліта для створення і модифікації таких файлів. Ви можете перевірити це ввівши htdigest в командний рядок.
Але навіть якщо htdigest у вас не встановлений, ви без зусиль розберетеся з цим форматом. Користувачі в ньому зберігаються по одному на рядок (розділені \ n). Кожен рядок має вигляд:
Логін в роз'ясненнях не потребує. Параметр realm повинен бути тим же, що і другий аргумент для конструктора Sabre \ DAV \ Auth \ Plugin. а digest a1 - це хеш, такий же, як в PDO-плагін:
Створення власного бекенда для аутентифікації
Якщо ви збираєтеся додати дайджест-аутентифікацію, використовуйте Sabre \ DAV \ Auth \ Backend \ AbstractDigest як батьківського класу, а класи Sabre \ DAV \ Auth \ Backend \ File і Sabre \ DAV \ Auth \ Backend \ PDO в якості прикладів.
Якщо ви збираєтеся реалізувати базову HTTP-аутентифікацію, використовуйте Sabre \ DAV \ Auth \ Backend \ AbstractBasic як батьківського класу і реалізуйте метод validateUserPass.
Додаткову інформацію про класи Sabre \ HTTP_ * можна знайти в статті RawAuthentication. У ній даються старі рекомендації по реалізації аутентифікації.
конфігурація вебсервера
Більшість веб-сервера прямо «з коробки» дозволяють отримання аутентифікаційних заголовків, але в деяких це потрібно явно включати.
Apache + (Fast) CGI
Якщо ви використовуєте PHP через CGI або FastCGI, то за замовчуванням Apache не пропускає аутентифікаційні заголовки. Ви можете включити їх за допомогою наступного правила mod_rewrite:
Якщо у вас вже є правило mod_rewrite, яке перенаправляє всі URL на якийсь з файлів сервера, вам потрібно змінити його за таким зразком:
Зверніть увагу на /server.php. Замість нього вам, зрозуміло, потрібно вказати свій відповідний файл.
IIS не підтримує HTTP_AUTHORIZATION автоматично. Ви можете включити її слідуючи Керівництву по PHP. Ось цитата з цього мануала:
Також зауважимо, що через обмеження Microsoft IIS починаючи з PHP 4.3.3, HTTP-аутентифікація не працює з цим сервером, коли PHP встановлений як CGI. Щоб вона запрацювала з PHP 4.3.3+, відредагуйте конфігурацію «Directory Security» в своєму IIS. Клацніть "Edit» і зніміть галки з усіх полів цієї конфігурації крім «Anonymous Access».
Проблема з безпечним режимом
Якщо включений «безпечний режим», PHP при аутентифікації буде автоматично додавати ідентифікатор процесу до полю realm. Це є проблемою для дайджест-аутентифікації, яка використовує realm для визначення хеша.
Щоб вирішити цю проблему, вимкніть безпечний режим, або використовуйте базову аутентифікацію замість дайджесту.
Додаткову інформацію шукайте в Керівництві по PHP.
Аутентифікація за допомогою веб-сервера
Аутентифікація може здійснюватися самим вебсервер. Це може виявитися корисним, якщо ви хочете використовувати просунуті способи аутентифікації, що надаються модулями Apache (в тому числі LDAP, Kerberos і SASL).
Для цього призначений бекенда Sabre \ DAV \ Auth \ Backend \ Apache. Щоб його використовувати, додавайте плагін наступним чином: