Интернет, компьютеры, софт и прочий Hi-Tech

Подписаться через RSS2Email.ru

Настройка аутентификации в SabreDAV

Перевод статьи «Authentication» с вики SabreDAV по состоянию на 8 ноября 2012.

Введение

После того как вы создали свой сервер WebDAV, вы, вероятно, хотите сделать его безопасным. Аутентификация в WebDAV производится с помощью базовой или дайджест- HTTP-аутентификации (RFC2617). Хотя ее несложно реализовать самостоятельно, SabreDAV предоставляет некоторые средства, которые могут облегчить ваш труд.

SabreDAV поставляется с плагином, который производит для вас аутентификацию. Он включает в себя два бэкэнда. Один для хранения пользовательских логинов в файле, другой — для хранения их в базе данных SQLite или MySQL. Оба используют HTTP-дайджест. Если вы хотите использовать базовую аутентификацию, вы должны создать собственный класс Backend, реализующий Sabre\DAV\Auth\Backend\BackendInterface.

Использование бэкэнда PDO

Бэкэнд PDO может использовать только базы данных MySQL или SQLite. Примеры создания таблиц вы можете найти в исходниках в директории examples/sql:

http://code.google.com/p/sabredav/source/browse/#hg/examples/sql

После создания экземпляра Sabre\DAV\Server, включите обсуждаемый плагин с помощью следующего кода:

use Sabre\DAV\Auth;

$pdo = new \PDO('sqlite:data/db.sqlite');
// или так:
// $pdo = new \PDO('mysql:dbname=sabredav','username','password');

// Бросать исключения, когда PDO столкнется с ошибкой:
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

// Создание бэкэнда
$authBackend = new Auth\Backend\PDO($pdo);

// Создание плагина. Здесь полагается, что имя realm — это 'SabreDAV'.
$authPlugin = new Auth\Plugin($authBackend,'SabreDAV');

// Добавляем плагин к серверу
$server->addPlugin($authPlugin);

Таблица SQL

Скрипты в примерах для SQL автоматически создают пользователя с логином admin и паролем admin. Измените его!

Вас может смутить поле digesta1. В нем хранится хэш пароля. Этот хэш вычисляется следующим образом:

md5('логин:realm:пароль');

С логином и паролем все понятно, но кроме них вы должны где-то хранить realm. Это тот же самый realm, который вы указывали ранее, когда создавали Sabre\DAV\Auth\Plugin.

Если вы захотите изменить realm в плагине, все существующие пароли станут недействительными, поскольку изменится их хэши.

Использование файлового бэкэнда

Бэкэнд Sabre\DAV\Auth\Backend\File использует простой файл для хранения пользовательских логинов и паролей. Формат этого файла идентичен файлу htdigest, используемого в Apache.

Если у вас установлен Apache, то, скорее всего, у вас есть утилита для создания и модификации таких файлов. Вы можете проверить это введя htdigest в командную строку.

Но даже если htdigest у вас не установлен, вы без труда разберетесь с этим форматом. Пользователи в нем хранятся по одному на строку (разделены \n). Каждая строка имеет вид:

логин:realm:digesta1

Логин в разъяснениях не нуждается. Параметр realm должен быть тем же, что и второй аргумент для конструктора Sabre\DAV\Auth\Plugin, а digest a1 — это хэш, такой же, как в PDO-плагине:

md5('логин:realm:пароль');

Создание собственного бэкэнда для аутентификации

Если вы собираетесь добавить дайджест-аутентификацию, используйте 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:

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</IfModule>

Если у вас уже есть правило mod_rewrite, которое перенаправляет все URL на какой-то из файлов сервера, вам нужно изменить его по следующему образцу:

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteRule .* /server.php [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</IfModule>

Обратите внимание на /server.php. Вместо него вам, разумеется, нужно указать свой соответствующий файл.

IIS

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. Чтобы его использовать, добавляйте плагин следующим образом:

use Sabre\DAV\Auth;

// Создание бэкэнда
$authBackend = new Auth\Backend\Apache();

// Создание плагина. Параметр realm игнорируется выбранным бэкэндом.
$authPlugin = new Auth\Plugin($authBackend,'SabreDAV');

// Добавление плагина к серверу
$server->addPlugin($authPlugin);

Перевод с английского: Дмитрий Скоробогатов, специально для xBB.uz, 21.02.2014
Оригинальный текст может быть найден по адресу http://code.google.com/p/sabredav/wiki/Authentication


Предыдущие публикации:

Биржа долевых инвестиций SIMEX.

Последнее редактирование: 2014-02-21 04:11:45

Метки материала: аутентификация, сервер webdav, sabredav, php, настройка аутентификации, webdav, сервер, http-аутентификация, вебсервер, authentication

Оставьте, пожалуйста, свой комментарий к публикации

Представиться как     Антибот:
   

Просьба не постить мусор. Если вы хотите потестить xBB, воспользуйтесь кнопкой предварительного просмотра на панели инструментов xBBEditor-а.


© 2007-2017, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.