2014-10-24 15 views
9

Ho un piccolo problema con il mio server Apache 2.2.15. Sto eseguendo un'app Django su di esso con mod_wsgi. Ho attivato WSGIPassAuthorization On, che ha reso l'autenticazione di base funzionante. Ma recentemente ho implementato OAuth2.0 per proteggere la mia API (Grant implicito), e penso che Apache non lo lascerà passare poiché è del modulo "Autorizzazione: token Bearer". Il "Portatore" è il problema che credo, anche se non so come evitarlo.Apache rimuove l'intestazione "Autorizzazione"

ho provato:

RewriteEngine On 
RewriteCond %{HTTP:Authorization} ^(.*) 
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1] 

Nel httpd.conf, .htaccess (dopo aver impostato AllowOverride All), e nel mio vhost. Niente da fare, non funziona. Ho navigato su Internet tutto il giorno e non ho trovato nulla, tranne queste due soluzioni.

Grazie in anticipo!

EDIT:

OS : RedHatEL6.4 
Apache : 2.2.15 
Django: 1.6.6 w/ django-oauth-toolkit 
Python: 2.7.8 
+0

Credo [QUESTO] (http://stackoverflow.com/a/13387616/2634075) è quello che stai cercando? So che questo è lo stesso codice che hai usato - ma quanto sei sicuro che apache stia leggendo ** a) Il tuo file .htaccess ** * o * ** b) Il file httpd.conf ** anche per favore prova * * riavvio di apache completamente **. Una cosa che ho notato con alcuni programmi Python è la necessità di avere abilitato mod_proxy che ti darà un altro livello di complessità. – JustSteveKing

+0

Non sono sicuro di .htaccess, anche se quasi sicuramente sta leggendo httpd.conf (le modifiche in questo file influenzano il comportamento del server). C'è qualche posto particolare nel file che dovrei mettere quelle linee? Grazie per la risposta btw, e ho appena controllato, mod_proxy è attivato. Ho riavviato con 'apachectl restart' e' apachectl stop; apachectl start', non ha risolto il problema: /. –

+0

Ok per iniziare con ciò che è necessario eseguire è 'service httpd restart' per riavviare apache correttamente su un server RH/CentOS. Questo potrebbe causare problemi. ** ANCHE ** Non apportarei affatto queste modifiche a http.conf poiché questo è il file di configurazione principale per apache - ** NON ** il file di configurazione per il tuo sito web. Si desidera modificare le cose in '/ etc/httpd/conf.d/yourSite.conf', quindi suggerirei di guardare lì e annullare le modifiche apportate alla configurazione di Apache predefinita. – JustSteveKing

risposta

22

ho risolto il mio problema, che finalmente era totalmente estraneo alla mia configurazione di Apache. Quindi, se hai trovato questo argomento alla ricerca di una risposta allo stesso problema, una delle soluzioni di seguito dovrebbe risolvere il problema:

Config WSGI:

WSGIPAssAuthorization On 

Config .htaccess:

RewriteEngine On 
RewriteCond %{HTTP:Authorization} ^(.*) 
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1] 

È puoi inserire entrambi nel tuo file httpd/conf.d/project.conf!

+4

necessario aggiungere anche l'autorizzazione 'SetEnvIf. + HTTP_AUTHORIZATION = $ 0' a' .htaccess' – simo

+0

@Simo Questo mi ha aiutato molto. – Volt

+0

@simo @Volt - le direttive 'RewriteRule' e' SetEnvIf' fanno effettivamente la stessa cosa (impostate la variabile di ambiente 'HTTP_AUTHORIZATION' sul contenuto dell'intestazione' Authorization'), quindi solo una delle due dovrebbe essere necessaria. – piit79

6

Diversi moduli elimineranno l'intestazione Autorizzazione per cercare di migliorare la sicurezza impedendo agli script di visualizzare nomi utente, password, ecc. A meno che lo sviluppatore non lo abiliti esplicitamente. Molti di questi moduli permettono questa intestazione se è sufficiente aggiungere la seguente riga in .htaccess: CGIPassAuth on (fonte: Apache docs e StackOverflow)

Problemi correlati