Pergunta

Eu quero dar aos usuários acesso a WebDAV usando Apache, mas eu quero autenticate-los primeiro e dar a cada acesso do usuário a uma pasta específica. Todos autenticação deve ser feito contra um banco de dados baseado em Django. Posso obter o Django-autenticação-me a trabalhar, mas eu preciso de ajuda com a parte onde eu autenticar cada utilizador e proporcionar-lhes uma área específica do utilizador webdav dedicado.

Alguma dica?

Foi útil?

Solução

Você pode achar que o apache mod_authn_dbd módulo dá o que você quer. Este módulo permite apache verificar um banco de dados SQL para autenticação e autorização. Você usaria esta directiva na <Location>, <Directory> (etc) área que você está tentando proteger:

<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>

A rigor, isso significa que você está autenticando contra o banco de dados do Django, e não contra o próprio aplicativo Django. Note que você tem total controle sobre a consulta, assim que você pode combiná-lo com outros parâmetros em todas as tabelas para se certificar de que o usuário está em boa posição, ou em determinados grupos, ou o que quer, antes de permitir que a autenticação.

Você pode precisar de mexer um pouco para certificar-se os mecanismos de hashing utilizados são os mesmos em ambos os Apache e Django.

Se este não atender, considere mover sua autenticação do banco de dados do Django em, digamos, um servidor LDAP. Com um backend de autenticação personalizada (há implementações LDAP existente para Django lá fora), o Django irá alegremente usar LDAP ... e auth LDAP / auth apoio no Apache é bastante robusto.

Outras dicas

Em primeiro lugar, para lhe outros leitores, o meu autenticação foi feito contra Django usando um roteiro autenticação WSGI .

Em seguida, há a carne da questão, dando a cada usuário Django, neste caso, seu próprio dir WebDav separado de outros usuários. Assumindo a seguinte configuração WebDAV na configuração sites virtuais Apache (habitualmente em / etc / apache2 / sites-enabled / )

<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>

Observe como não há nenhum endereço público para WebDAV criado ainda. Este, ea coisa área do usuário, é fixado em duas linhas no arquivo mesma config (colocá-los após a cláusula final):

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

Agora, o WebDAV é acessado on http://my-server.com/webdav-url/ o usuário recebe um login rápido e irá, em seguida terra em um subdiretório à raiz do WebDAV, tendo o mesmo nome que o seu nome de usuário. LA-U: faz Apache "à frente look" e deixar o sinal de utilizador no antes determinar o caminho de montagem, o que é crucial, uma vez que caminho depende do nome de usuário. Sem algum reescrever regra não haverá URL, eo usuário não terá um login rápido. Em outras palavras, LA-U evita um catch-22 para este tipo de manipulação de login.

Precauções : exige mod_rewrite esteja ativado, e nomes de usuário deve ser válido como nomes dir sem qualquer modificação. Além disso, os diretórios de usuário não serão criados automaticamente por esses comandos, assim que sua existência deve ser assegurada de alguma outra forma.

Eu sei que esta questão é antiga, mas apenas como um complemento ... Se você estiver usando mod_python, você também pode estar interessado em " autenticação contra o banco de dados do usuário do Django de Apache " seção de documentação do Django.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top