Domanda

Voglio dare agli utenti l'accesso a WebDav usando Apache, ma voglio autenticarsi loro per primi e dare ad ogni utente l'accesso a una cartella specifica. Tutto l'autenticazione deve essere fatto con un database Django-based. Posso ottenere il Django autenticazione me stesso lavoro, ma ho bisogno di aiuto con la parte in cui mi autenticazione di ogni utente e di fornire loro una zona specifica dell'utente WebDAV dedicato.

Eventuali suggerimenti?

È stato utile?

Soluzione

Si potrebbe scoprire che il apache mod_authn_dbd modulo ti dà quello che tu vuoi. Questo modulo consente di apache controllare un database SQL per l'autenticazione e l'autorizzazione. Si potrebbe usare questa direttiva nel <Location>, <Directory> (ecc) zona che si sta tentando di proteggere:

<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 di termini, questo significa che si sta autenticazione contro la base di dati di Django, non contro l'applicazione Django stesso. Si noti che si ha il pieno controllo della domanda, in modo da poter combinare con altri parametri in tutte le tabelle per assicurarsi che l'utente è in regola, o in alcuni gruppi, o qualsiasi altra cosa, prima di consentire l'autenticazione.

Potrebbe essere necessario agitarsi un po 'intorno per assicurarsi che i meccanismi di hash utilizzati sono gli stessi in entrambi i apache e Django.

Se questo non va bene, è possibile spostare il l'autenticazione dal database Django in, diciamo, un server LDAP. Con un backend di autenticazione personalizzato (non ci sono implementazioni LDAP per Django là fuori già esistente), Django sarà lieto di usare LDAP ... e autenticazione LDAP / supporto di autenticazione in Apache è abbastanza robusto.

Altri suggerimenti

In primo luogo, per voi altri lettori, il mio l'autenticazione è stato fatto contro Django utilizzando un lo script di autenticazione WSGI .

Poi, c'è la carne della questione, dando ad ogni utente Django, in questo caso, la propria WebDav dir separato dagli altri utenti. Supponendo che la seguente configurazione WebDAV nella configurazione di siti virtuali Apache (abitualmente in / 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>

Si noti come non c'è alcun indirizzo pubblico per WebDav impostato ancora. Questo, e la cosa area utente, è fissato in due righe nel file di configurazione stesso (mettere questi dopo la clausola finale):

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

Ora, WebDAV si accede su http://my-server.com/webdav-url/ l'utente ottiene un prompt di login per poi atterrare in una sottodirectory alla radice WebDAV, con lo stesso nome come il loro nome utente. LA-U: fa Apache "guardare avanti" e lasciare il segno utente in prima determinare il percorso di montaggio, che è cruciale da quel percorso dipende dal nome utente. Senza qualche riscrittura-regola non ci sarà alcun URL, e l'utente non sarà possibile ottenere un prompt di login. In altre parole, LA-U evita un catch-22 per questo tipo di gestione di accesso.

Precauzioni : richiede mod_rewrite sia abilitato, e nomi utente devono essere validi come nomi dir senza alcuna modifica. Inoltre, i dirs dell'utente non verranno creati automaticamente da questi comandi, così la loro esistenza deve essere assicurata in qualche altro modo.

So che questa domanda è vecchio, ma solo come aggiunta ... Se si sta utilizzando mod_python, si può anche essere interessati a " autenticazione contro il database degli utenti di Django da Apache " di documentazione di Django.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top