2014-10-24 19 views
9

Tôi gặp sự cố nhỏ với Máy chủ Apache 2.2.15 của tôi. Tôi đang chạy một ứng dụng Django trên đầu trang của nó với mod_wsgi. Tôi đã kích hoạt WSGIPassAuthorization On, giúp xác thực cơ bản hoạt động tốt. Nhưng gần đây tôi đã triển khai OAuth2.0 để bảo mật API của tôi (Implicit Grant) và tôi nghĩ Apache sẽ không cho phép nó vượt qua vì nó có dạng "Mã ủy quyền: Mã thông báo gấu". "Bearer" là vấn đề tôi đoán, mặc dù tôi không biết làm thế nào để tránh điều đó.Apache dải xuống tiêu đề "Ủy quyền"

tôi đã cố gắng:

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

Trong httpd.conf, .htaccess (sau khi thiết AllowOverride All), và trong vhost của tôi. Không có gì để làm, không hoạt động. Tôi đã thu thập dữ liệu Internet cả ngày và không tìm thấy gì ngoài hai giải pháp đó.

Cảm ơn bạn trước!

EDIT:

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

Tôi tin [NÀY] (http://stackoverflow.com/a/13387616/2634075) là những gì bạn đang tìm kiếm? Tôi biết đây là cùng một mã như bạn đã sử dụng - nhưng làm thế nào chắc chắn là bạn mà apache là đọc hoặc là ** a) Tập tin .htaccess của bạn ** * hoặc * ** b) Tập tin httpd.conf ** cũng vui lòng thử * * khởi động lại apache hoàn toàn **. Một điều tôi nhận thấy với một số chương trình Python là yêu cầu để có mod_proxy được kích hoạt mà sẽ cung cấp cho bạn một lớp phức tạp. – JustSteveKing

+0

Tôi không chắc chắn về .htaccess, mặc dù gần như chắc chắn nó đang đọc httpd.conf (sửa đổi trong tập tin này ảnh hưởng đến hành vi của máy chủ). Có bất kỳ vị trí cụ thể trong tập tin tôi nên đặt những dòng mặc dù? Cảm ơn bạn đã trả lời btw của bạn, và tôi vừa kiểm tra, mod_proxy được kích hoạt. Tôi khởi động lại với 'apachectl restart' và 'apachectl stop; apachectl start', không giải quyết được vấn đề: /. –

+0

Ok để bắt đầu với những gì bạn cần chạy là 'service httpd restart' để khởi động lại apache đúng trên máy chủ RH/CentOS. Điều này có thể gây ra sự cố cho bạn. ** C ALNG ** Tôi sẽ không thực hiện những thay đổi này ở tất cả để http.conf vì đây là tệp cấu hình chính cho apache - ** NOT ** tệp cấu hình cho trang web của bạn. Bạn muốn chỉnh sửa mọi thứ trong '/ etc/httpd/conf.d/yourSite.conf' vì vậy tôi khuyên bạn nên tìm và hủy bỏ bất kỳ thay đổi nào bạn đã thực hiện đối với cấu hình apache mặc định. – JustSteveKing

Trả lời

22

tôi giải quyết vấn đề của tôi, mà cuối cùng là hoàn toàn không liên quan đến cấu hình Apache của tôi. Vì vậy, nếu bạn tìm thấy chủ đề này tìm kiếm một câu trả lời cho cùng một vấn đề, một trong những giải pháp dưới đây sẽ sửa chữa nó:

Config WSGI:

WSGIPAssAuthorization On 

Config .htaccess:

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

Bạn có thể đặt cả hai tệp đó vào tệp httpd/conf.d/project.conf của bạn!

+4

cần thiết để thêm điều này cũng 'SetEnvIf Authorization. + HTTP_AUTHORIZATION = $ 0' vào' .htaccess' – simo

+0

@Simo Điều này đã giúp tôi rất nhiều. – Volt

+0

@simo @Volt - chỉ lệnh 'RewriteRule' và' SetEnvIf' thực sự làm điều tương tự (đặt biến môi trường 'HTTP_AUTHORIZATION' thành nội dung của tiêu đề' Authorization'), vì vậy chỉ cần một trong hai điều cần thiết. – piit79

6

Một số mô-đun sẽ loại bỏ tiêu đề Cấp phép để tăng cường bảo mật bằng cách ngăn các tập lệnh nhìn thấy tên người dùng, mật khẩu, v.v. trừ khi nhà phát triển bật điều này một cách rõ ràng. Nhiều mô-đun này sẽ cho phép tiêu đề này nếu bạn chỉ cần thêm dòng sau vào .htaccess: CGIPassAuth on (nguồn: Apache docsStackOverflow)

Các vấn đề liên quan