headers - Obteniendo el encabezado de Autorización personalizado de la solicitud entrante de PHP
php get headers (5)
Así que estoy tratando de analizar una solicitud entrante en PHP que tiene el siguiente conjunto de encabezado:
Authorization: Custom Username
Pregunta simple: ¿cómo demonios consigo ponerla en mis manos? Si era Authorization: Basic
, podría obtener el nombre de usuario de $_SERVER["PHP_AUTH_USER"]
. Si era X-Custom-Authorization: Username
, podría obtener el nombre de usuario de $_SERVER["HTTP_X_CUSTOM_AUTHORIZATION"]
. Pero ninguno de estos se establece mediante una Autorización personalizada, var_dump($_SERVER)
revela que no se menciona el encabezado (en particular, falta AUTH_TYPE
), y las funciones de PHP5 como get_headers()
solo funcionan en las respuestas a solicitudes salientes. Estoy ejecutando PHP 5 en Apache con una instalación de Ubuntu lista para usar.
Agregue este código en su .htaccess
RewriteEngine On
RewriteRule .* - [e=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
Pase su encabezado como Authorization: {auth_code}
y finalmente obtendrá el código de Autorización usando $_SERVER[''HTTP_AUTHORIZATION'']
Para autenticación basada en token:
$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];
}
}
Para el fondo, ¿por qué Apache filtra el encabezado de Authorization
: https://.com/a/17490827
Soluciones que dependen del módulo de Apache que se usa para pasar la solicitud a la aplicación:
mod_wsgi, mod_fcgid:
- https://.com/a/30310338
cgi
- https://.com/a/38175451
Otros hacks - masajeando los encabezados en esta pregunta:
Si solo vas a utilizar Apache, deberías echar un vistazo a apache_request_headers()
.
Uso de juste:
$headers = apache_request_headers();
$token = $headers[''token''];