Налаштування аутентифікації в sabredav

Після того як ви створили свій сервер 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. Щоб його використовувати, додавайте плагін наступним чином:

Схожі статті