Вопрос

Я хочу предоставить пользователям доступ к WebDAV с помощью Apache, но сначала я хочу аутентифицировать их и предоставить каждому пользователю доступ к определенной папке.Вся аутентификация должна выполняться с использованием базы данных на основе Django.Я могу заставить Django-authentication работать сам, но мне нужна помощь с той частью, где я аутентифицирую каждого пользователя и предоставляю им выделенную область webdav, специфичную для пользователя.

Какие-нибудь намеки?

Это было полезно?

Решение

Вы могли бы обнаружить, что apache mod_authn_dbd мод_автор_дбд модуль дает вам то, что вы хотите.Этот модуль позволяет apache проверять базу данных SQL на предмет аутентификации и авторизации.Вы бы использовали эту директиву в <Location>, <Directory> (и т.д.) область, которую вы пытаетесь защитить:

<Directory /usr/www/myhost/private>
    # other config ere
    # mod_authn_dbd SQL query to authenticate a user
    AuthDBDUserPWQuery \
         "SELECT password FROM authn WHERE user = %s"
 </Directory>

Строго говоря, это означает, что вы выполняете аутентификацию в базе данных Django, а не в самом приложении Django.Обратите внимание, что у вас есть полный контроль над запросом, поэтому вы МОЖЕТЕ объединить его с другими параметрами в любых таблицах, чтобы убедиться, что пользователь находится на хорошем счету, или в определенных группах, или что-то еще, прежде чем разрешить аутентификацию.

Возможно, вам придется немного повозиться, чтобы убедиться, что используемые механизмы хеширования одинаковы как в apache, так и в django.

Если это не подходит, рассмотрите возможность переноса вашей аутентификации из базы данных django, скажем, на сервер LDAP.Имея пользовательский сервер аутентификации (существуют существующие реализации LDAP для django), django с радостью будет использовать LDAP...и поддержка LDAP auth / аутентификации в Apache довольно надежна.

Другие советы

Во-первых, для вас, другие читатели, моя аутентификация была выполнена в Django с использованием Скрипт аутентификации WSGI.

Затем возникает суть вопроса: предоставить каждому пользователю Django, в данном случае, свой собственный каталог WebDAV, отделенный от других пользователей.Предполагая следующую настройку WebDAV в конфигурации виртуальных сайтов Apache (обычно в /etc/apache2/сайты-включены/)

<Directory /webdav/root/on/server>
        DAV On

        # No .htaccess allowed
        AllowOverride None      

        Options Indexes

        AuthType Basic
        AuthName "Login to your webdav area"
        Require valid-user
        AuthBasicProvider wsgi
        WSGIAuthUserScript  /where/is/the/authentication-script.wsgi
   </Directory>

Обратите внимание, что публичный адрес для WebDAV еще не настроен.Это, как и проблема с пользовательской областью, исправлено в двух строках в одном и том же конфигурационном файле (поместите их после предложения ending).:

RewriteEngine On
RewriteRule ^/webdav-url/(.*?)$ /webdav/root/on/server/%{LA-U:REMOTE_USER}/$1

Теперь доступ к webdav осуществляется на http://my-server.com/webdav-url/ Пользователь получит приглашение для входа в систему, а затем попадет в подкаталог корневого каталога webdav с тем же именем, что и его имя пользователя. ЛА-У: заставляет Apache "смотреть вперед" и позволяет пользователю войти в систему до того , как определение пути монтирования, что имеет решающее значение, поскольку этот путь зависит от имени пользователя.Без какого-либо правила перезаписи URL-адреса не будет, и пользователь не получит приглашение для входа в систему.Другими словами, LA-U избегает уловки 22 для этого типа обработки входа в систему.

Меры предосторожности:требуется, чтобы mod_rewrite был включен, а имена пользователей должны быть действительными как имена каталогов без каких-либо изменений.Кроме того, каталоги пользователей не будут создаваться автоматически этими командами, поэтому их существование должно быть обеспечено каким-либо другим способом.

Я знаю, что этот вопрос устарел, но просто как дополнение...Если вы используете mod_python, вас также может заинтересовать "Аутентификация в пользовательской базе данных Django из Apache" раздел документации Django.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top