2014-10-24 4 views
9

Apache 2.2.15 서버에 약간 문제가 있습니다. mod_wsgi를 사용하여 장고 앱을 실행하고 있습니다. WSGIPassAuthorization On을 활성화하여 기본 인증이 잘 작동하도록했습니다. 하지만 최근에 내 API (Implicit Grant)를 보호하기 위해 OAuth2.0을 구현했으며, Apache가 "Authorization : Bearer token"형식이므로 통과하지 못한다고 생각합니다. "무기명"은 내가 그런 문제를 피하는 방법을 모르지만 나는 추측한다. Apache가 "Authorization"헤더를 제거했습니다.

나는 시도 : 값을 httpd.conf에서

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

를 htaccess로 (AllowOverride All을 설정 한 후), 내 가상 호스트에. 할 일이 없으며 작동하지 않습니다. 저는 하루 종일 인터넷을 크롤링했지만 두 가지 솔루션 이외에는 아무것도 찾지 못했습니다.

미리 감사드립니다.

편집 : 나는 마침내 내 아파치 구성에 전혀 관련이없는했다 내 문제를 해결

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

[이] (http://stackoverflow.com/a/13387616/2634075) 당신이 찾고있는 것이 무엇입니까? 나는 이것이 당신이 사용했던 것과 같은 코드라는 것을 알고있다. - 그러나 아파치가 ** a) 당신의 .htaccess 파일 ** 또는 * ** b) httpd.conf 파일을 읽는 것은 확실한가요 ** 또한 시도해보십시오 * * 아파치를 완전히 다시 시작 **. 내가 파이썬 프로그램 중 일부에서 알아 차린 사실 중 하나는 mod_proxy가 활성화되어있어 다른 계층의 복잡성을 제공해야한다는 것입니다. – JustSteveKing

+0

.htaccess에 대해 잘 모르겠지만, httpd.conf (이 파일의 수정 내용은 서버의 동작에 영향을 미침)를 읽는 것으로 거의 확신 할 수 있습니다. 그 줄을 넣어야하는 파일의 특정 위치가 있습니까? 귀하의 답변을 주셔서 감사합니다 btw, 그리고 난 그냥 확인, mod_proxy가 활성화됩니다. 나는'apachectl restart'와'apachectl stop;으로 다시 시작했다. apachectl start', 문제를 해결하지 못했습니다 : /. –

+0

RH/CentOS 서버에서 아파치를 제대로 재시작하기 위해서는'service httpd restart'가 필요합니다. 이로 인해 문제가 발생할 수 있습니다. ** 또한 ** 아파치를위한 기본 설정 파일 인 ** http **로 변경하지 않을 것입니다 ** ** 귀하의 웹 사이트를위한 설정 파일이 아닙니다. '/ etc/httpd/conf.d/yourSite.conf'에있는 것들을 편집하고 싶기 때문에 기본 아파치 설정에 대한 변경 사항을 취소하고 수정하는 것이 좋습니다. – JustSteveKing

답변

22

. 이 같은 문제에 대한 답을 찾고이 주제를 발견한다면, 솔루션 중 하나는 아래를 해결해야합니다

구성의 WSGI :

WSGIPAssAuthorization On 

구성 htaccess로 :

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

당신을 둘 다 httpd/conf.d/project.conf 파일에 넣을 수 있습니다!

+4

또한'SetEnvIf Authorization. + HTTP_AUTHORIZATION = $ 0'을'.htaccess'에 추가하십시오. – simo

+0

@Simo 이것은 많은 도움이되었습니다. – Volt

+0

@simo @Volt -'RewriteRule'과'SetEnvIf' 지시어는 실제로 동일한 것을합니다. (환경 변수'HTTP_AUTHORIZATION'을'Authorization' 헤더의 내용으로 설정하십시오.) 그래서 둘 중 하나만 필요합니다. – piit79

6

몇몇 모듈은 개발자가 명시 적으로 이것을 허용하지 않는 한 스크립트가 사용자 이름, 암호 등을 볼 수 없도록하여 보안을 향상시키기 위해 인증 헤더를 제거합니다. 당신은 단순히을 .htaccess에 다음 줄을 추가하는 경우 이러한 모듈의 대부분이 헤더를 허용합니다 : CGIPassAuth on (출처 : Apache docsStackOverflow) 내가 믿는

관련 문제