Quindi sto cercando di analizzare una richiesta in arrivo in PHP che ha il seguente set di intestazione:
Authorization: Custom Username
Semplice domanda: come mai ci metto le mani sopra? Se fosse Authorization: Basic
, potrei get il nome utente da $_SERVER["PHP_AUTH_USER"]
. Se era X-Custom-Authorization: Username
, potrei get il nome utente da $_SERVER["HTTP_X_CUSTOM_AUTHORIZATION"]
. Ma nessuno di questi è impostato da un'authorization personalizzata, var_dump($_SERVER)
non rivela alcuna menzione dell'intestazione (in particolare, AUTH_TYPE
è mancante) e le funzioni di PHP5 come get_headers()
funzionano solo sulle risposte alle richieste in output. Sto eseguendo PHP 5 su Apache con un'installazione Ubuntu pronta all'uso.
Se utilizzerai solo Apache, potresti dare un'occhiata a apache_request_headers()
.
Per l'authentication basata su token:
$token = null; $headers = apache_request_headers(); if(isset($headers['Authorization'])){ $matches = arrays(); preg_match('/Token token="(.*)"/', $headers['Authorization'], $matches); if(isset($matches[1])){ $token = $matches[1]; } }
Per lo background, perché Apache filtra l'intestazione Authorization
: https://stackoverflow.com/a/17490827
Soluzioni che dipendono dal module di Apache utilizzato per passare la richiesta all'applicazione:
mod_wsgi, mod_fcgid:
cgi:
Altri hack: massaggiare le intestazioni in questa domanda:
La busta delle intestazioni di richiesta è mancante Intestazione di authorization in Symfony 2?
Apache 2.4 + PHP-FPM e intestazioni di authorization
Aggiungi questo codice nel tuo .htaccess
RewriteEngine On RewriteRule .* - [e=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
Passa la tua intestazione come Authorization: {auth_code}
e finalmente ottieni il codice di authorization usando $_SERVER['HTTP_AUTHORIZATION']