2010-05-25 35 views
24

Vì vậy, tôi đang cố gắng để phân tích một request đến trong PHP trong đó có các thiết lập tiêu đề sau đây:tiêu đề tùy chỉnh Authorization tìm nạp từ yêu cầu PHP đến

Authorization: Custom Username 

câu hỏi đơn giản: làm thế nào trên trái đất làm tôi nhận được bàn tay của tôi trên nó ? Nếu là Authorization: Basic, tôi có thể lấy tên người dùng từ $_SERVER["PHP_AUTH_USER"]. Nếu đó là X-Custom-Authorization: Username, tôi có thể lấy tên người dùng từ $_SERVER["HTTP_X_CUSTOM_AUTHORIZATION"]. Nhưng không phải trong số này được thiết lập bởi Ủy quyền tùy chỉnh, var_dump($_SERVER) cho thấy không có đề cập đến tiêu đề (cụ thể là thiếu AUTH_TYPE) và các hàm PHP5 như get_headers() chỉ hoạt động đối với các yêu cầu gửi đi. Tôi đang chạy PHP 5 trên Apache với một out-of-hộp Ubuntu cài đặt.

Trả lời

35

Nếu bạn chỉ sử dụng Apache, bạn có thể muốn xem apache_request_headers().

+0

trình đẹp, cảm ơn! – jpatokal

+0

@halfdan: khác? tôi đang sử dụng nginx và tôi không thể nhận được ủy quyền trong tiêu đề. – Divakarcool

32

Đối với thẻ auth dựa trên:

$token = null; 
    $headers = apache_request_headers(); 
    if(isset($headers['Authorization'])){ 
    $matches = array(); 
    preg_match('/Token token="(.*)"/', $headers['Authorization'], $matches); 
    if(isset($matches[1])){ 
     $token = $matches[1]; 
    } 
    } 
6

Đối với nền, tại sao Apache lọc đi những Authorization tiêu đề: https://stackoverflow.com/a/17490827

Giải pháp tùy thuộc vào Apache Module này được sử dụng để vượt qua các yêu cầu ứng dụng:

mod_wsgi, mod_fcgid:

cgi:

hacks khác - xoa bóp tiêu đề trong câu hỏi này:

5

Thêm mã này vào bạn .htaccess

RewriteEngine On 
RewriteRule .* - [e=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

Vượt qua tiêu đề của bạn như Authorization: {auth_code} và cuối cùng bạn sẽ có được Mã ủy quyền bằng cách sử dụng $_SERVER['HTTP_AUTHORIZATION']

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