Отсутствует заголовок заголовка запроса. Заголовок авторизации в Symfony 2?

Я пытаюсь внедрить собственный поставщик проверки подлинности в Symfony 2. Я отправляю тестовый запрос с использованием Fiddler и печатаю все серверные серверы заголовков; ну, заголовок Authorization отсутствует.

Я делаю что-то неправильно?

 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 

Слушатель просто печатает заголовки и завершает работу:

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

Отсутствует ответ. Заголовок 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 ) ) 

Solutions Collecting From Web of "Отсутствует заголовок заголовка запроса. Заголовок авторизации в Symfony 2?"

Вы должны добавить этот код в свой виртуальный хост

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

Работайте в теге Virtualhost, а не в теге Directory.

Ответ Akambi не сработал для меня, но нашел этот ответ на веб-сайте php:

«Обходной путь для отсутствия заголовка авторизации в CGI / FastCGI Apache:

 SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0 

Теперь PHP должен автоматически объявлять переменные $ _SERVER [PHP_AUTH_ *], если клиент отправляет заголовок авторизации ».

Спасибо derkontrollfreak + 9hy5l!

В то время проверенное решение работало для меня, чтобы получить заголовок авторизации. Однако он сгенерировал пустой заголовок авторизации, когда в входящем запросе не было ни одного. Вот как я это решил:

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

У меня была такая же проблема при написании публичного API с настраиваемым заголовком Authorization . Чтобы установить HeaderBag я использовал прослушиватель:

 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']); } } } } 

и связал его с kernel.request в определении службы:

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

Заголовок авторизации используется для базовой проверки подлинности http, которая отбрасывается apache, если не в допустимом формате. Попробуйте использовать другое имя.

Другим вариантом, который работал для Apache 2.4, когда другие параметры не были, – это установить параметр CGIPassAuth в соответствующем контексте <Directory> , например:

 CGIPassAuth On 

Согласно документации, она доступна с Apache 2.4.13.

Другим решением является изменение вашего обработчика PHP для запуска PHP как Apache Module а не как CGI application .

вы можете использовать getallheaders() .