2010-05-25 10 views
24

Also, den folgenden Kopfsatz Ich versuche, eine eingehende Anforderung in PHP zu analysieren hat:Fetching benutzerdefinierte Authorization-Header von eingehender PHP Anfrage

Authorization: Custom Username 

Einfache Frage: wie auf der Erde zu tun bekomme ich meine Hände auf sie ? Wenn es Authorization: Basic wäre, könnte ich den Benutzernamen von $_SERVER["PHP_AUTH_USER"] bekommen. Wenn es X-Custom-Authorization: Username wäre, könnte ich den Benutzernamen von $_SERVER["HTTP_X_CUSTOM_AUTHORIZATION"] bekommen. Aber keine von diesen sind durch eine benutzerdefinierte Autorisierung festgelegt, var_dump($_SERVER) zeigt keine Erwähnung der Kopfzeile (insbesondere AUTH_TYPE fehlt), und PHP5-Funktionen wie get_headers() funktionieren nur auf Antworten auf ausgehende Anfragen. Ich führe PHP 5 auf Apache mit einer Ubuntu-Installation aus.

Antwort

32

Für Token basiert Auth:

$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

für den Hintergrund, warum Apache-Filter entfernt die Authorization Header: https://stackoverflow.com/a/17490827

Lösungen je nach dem Apache-Modul verwendet wird, um die Anforderung an die Anwendung zu übergeben:

mod_wsgi, mod_fcgid:

cgi:

Andere Hacks - die Header in dieser Frage zu massieren:

5

Fügen Sie diesen Code in Ihre .htaccess

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

Fahren Sie mit Kopf wie Authorization: {auth_code} und Sie erhalten schließlich den Autorisierungscode von $_SERVER['HTTP_AUTHORIZATION']