variable how php http symfony http-headers fiddler

php - how - twig parent block



¿Encabezado de solicitud falta el encabezado de autorización en Symfony 2? (8)

Debe agregar este código a su servidor virtual

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

Trabajar en la etiqueta de Virtualhost, no en la etiqueta de Directorio.

Estoy intentando implementar un proveedor de autenticación personalizado en Symfony 2. Estoy enviando una solicitud de prueba con Fiddler e imprimiendo todos los encabezados del lado del servidor; bueno, falta el encabezado de Authorization .

¿Estoy haciendo algo mal?

GET /RESTfulBackend/web/index.php HTTP/1.1 Authorization: FID 44CF9590006BF252F707:jZNOcbfWmD/ Host: localhost User-Agent: Fiddler Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: it-it,it;q=0.8,en-us;q=0.5,en;q=0.3

El oyente simplemente imprime los encabezados y se cierra:

class HMACListener implements ListenerInterface { private $securityContext; private $authenticationManager; public function handle(GetResponseEvent $event) { $request = $event->getRequest(); print_r($request->headers->all()); die(); } }

Respuesta falta el encabezado de Authorization :

Array ( [host] => Array ( [0] => localhost ) [user-agent] => Array ( [0] => Fiddler ) [accept] => Array ( [0] => text/html,application/xhtml+xml,application/xml ) [accept-language] => Array ( [0] => it-it,it;q=0.8,en-us;q=0.5,en;q=0.3 ) )


Deberíamos autorizar este encabezado "Autorización" en el lado del servidor,

también se hace simplemente con nelmioCorsBundle nelmio_cors: defaults: allow_credentials: false allow_origin: [] allow_headers: [] allow_methods: [] expose_headers: [] max_age: 0 hosts: [] origin_regex: false forced_allow_origin_value: ~ paths: ''^/api/'': allow_origin: [''*''] allow_headers: [''Authorization'']


El encabezado de autorización se utiliza para la autenticación básica HTTP que apache descarta si no está en formato válido. Intenta usar otro nombre.


La respuesta de Akambi no funcionó para mí, pero encontré esta respuesta en el sitio web php:

"Solución para el encabezado de autorización faltante en CGI / FastCGI Apache:

SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0

Ahora, PHP debería declarar automáticamente las variables $ _SERVER [PHP_AUTH_ *] si el cliente envía el encabezado de autorización. "

Gracias derkontrollfreak + 9hy5l!


La solución verificada funcionó para mí en ese momento para obtener el encabezado de Autorización. Sin embargo, generó un encabezado de Autorización vacío cuando no había ninguno en la solicitud entrante. Así es como lo resolví:

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


Otra opción que funcionó para Apache 2.4 cuando otras opciones no lo hicieron fue establecer la opción CGIPassAuth en el contexto relevante de <Directory> , como este:

CGIPassAuth On

De acuerdo con la documentación, está disponible desde Apache 2.4.13.


Otra solución es cambiar su manejador PHP para ejecutar PHP como Apache Module lugar de como CGI application .


Tuve el mismo problema al escribir una API pública con encabezado de Authorization personalizado. Para arreglar el HeaderBag usé un oyente:

namespace My/Project/Frontend/EventListener; use Symfony/Component/HttpFoundation/HeaderBag; use Symfony/Component/HttpKernel/Event/GetResponseEvent; /** * Listener for the REQUEST event. Patches the HeaderBag because the * "Authorization" header is not included in $_SERVER */ class AuthenticationHeaderListener { /** * Handles REQUEST event * * @param GetResponseEvent $event the event */ public function onKernelRequest(GetResponseEvent $event) { $this->fixAuthHeader($event->getRequest()->headers); } /** * PHP does not include HTTP_AUTHORIZATION in the $_SERVER array, so this header is missing. * We retrieve it from apache_request_headers() * * @param HeaderBag $headers */ protected function fixAuthHeader(HeaderBag $headers) { if (!$headers->has(''Authorization'') && function_exists(''apache_request_headers'')) { $all = apache_request_headers(); if (isset($all[''Authorization''])) { $headers->set(''Authorization'', $all[''Authorization'']); } } } }

y kernel.request a kernel.request en la definición del servicio:

services: fix_authentication_header_listener: class: My/Project/Frontend/EventListener/AuthenticationHeaderListener tags: - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: 255 }