2014-10-24 12 views
9

Ich habe ein kleines Problem mit meinem Apache 2.2.15 Server. Ich betreibe eine Django-App mit mod_wsgi darüber. Ich habe WSGIPassAuthorization On aktiviert, wodurch die Basic-Authentifizierung funktioniert. Aber ich habe vor kurzem OAuth2.0 implementiert, um meine API (Implicit Grant) zu sichern, und ich denke, Apache wird es nicht passieren lassen, da es das Format "Authorization: Bearer Token" hat. Der "Träger" ist das Problem, denke ich, obwohl ich nicht weiß, wie ich das vermeiden kann.Apache Streifen "Authorization" Header

Ich habe versucht:

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

In der httpd.conf, .htaccess (nach AllowOverride All Einstellung), und in meinem vhost. Nichts zu tun, funktioniert nicht. Ich habe den ganzen Tag lang im Internet gecrawlt und habe nur diese beiden Lösungen gefunden.

Vielen Dank im Voraus!

EDIT:

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

Ich glaube [DIESE] (http://stackoverflow.com/a/13387616/2634075) ist was du suchst? Ich weiß, das ist der gleiche Code wie du benutzt hast - aber wie sicher bist du das Apache liest entweder ** a) deine .htaccess Datei ** * oder * ** b) die httpd.conf Datei ** auch bitte * * Apache vollständig neu starten **. Eine Sache, die ich bei einigen Python-Programmen bemerkt habe, ist die Notwendigkeit mod_proxy aktiviert zu haben, was dir eine weitere Ebene der Komplexität gibt. – JustSteveKing

+0

Ich bin mir nicht sicher über die .htaccess, obwohl fast sicher, dass es die httpd.conf liest (Änderungen in dieser Datei beeinflussen das Verhalten des Servers). Gibt es einen bestimmten Platz in der Datei, in den ich diese Zeilen schreiben sollte? Danke für deine Antwort übrigens, und ich habe gerade überprüft, mod_proxy ist aktiviert. Ich habe mit 'apachectl restart' und' apachectl stop; apachectl start', hat das Problem nicht gelöst: /. –

+0

Ok, um mit dem zu starten, was Sie ausführen müssen, ist "service httpd restart", um Apache korrekt auf einem RH/CentOS-Server neu zu starten. Dies könnte Probleme verursachen. ** AUCH ** Ich würde diese Änderungen überhaupt nicht in http.conf vornehmen, da dies die Hauptkonfigurationsdatei für Apache ist - ** NICHT ** die Konfigurationsdatei für Ihre Website. Sie möchten Dinge in '/ etc/httpd/conf.d/yourSite.conf' bearbeiten, also würde ich vorschlagen, dort nachzusehen und alle Änderungen rückgängig zu machen, die Sie an der Standard-Apache-Konfiguration vorgenommen haben. – JustSteveKing

Antwort

22

ich mein Problem gelöst, das schließlich völlig unabhängig von meiner Apache-Konfiguration war. Also, wenn Sie dieses Thema für eine Antwort auf das gleiche Problem der Suche gefunden, eine der folgenden Lösungen sollte es beheben:

Config WSGI:

WSGIPAssAuthorization On 

.htaccess Config:

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

Sie kann beides in Ihre httpd/conf.d/project.conf Datei eintragen!

+4

benötigt, um dies auch 'SetEnvIf Autorisierung. + HTTP_AUTHORIZATION = $ 0' zu' .htaccess' hinzufügen – simo

+0

@Simo Das hat mir sehr geholfen. – Volt

+0

@simo @Volt - die 'RewriteRule'- und die' SetEnvIf'-Direktiven machen das gleiche (setzen die Umgebungsvariable 'HTTP_AUTHORIZATION' auf den Inhalt des 'Authorization'-Headers), so dass nur einer der beiden notwendig sein sollte. – piit79

6

Mehrere Module entfernen den Berechtigungsheader, um die Sicherheit zu erhöhen, indem verhindert wird, dass Skripts Benutzernamen, Kennwörter usw. sehen, es sei denn, der Entwickler aktiviert dies ausdrücklich. Viele dieser Module erlauben diesen Header, wenn Sie einfach die folgende Zeile zu .htaccess hinzufügen: CGIPassAuth on (source: Apache docs und StackOverflow)

Verwandte Themen