Поэтому я пытаюсь разобрать входящий запрос в PHP, который имеет следующий набор заголовков:
Authorization: Custom Username
Простой вопрос: как, на мой взгляд, я могу это понять? Если это была Authorization: Basic
, я мог бы получить имя пользователя из $_SERVER["PHP_AUTH_USER"]
. Если это было X-Custom-Authorization: Username
, я мог бы получить имя пользователя из $_SERVER["HTTP_X_CUSTOM_AUTHORIZATION"]
. Но ни один из них не задан пользовательской авторизацией, var_dump($_SERVER)
указывает на заголовок (в частности, AUTH_TYPE
отсутствует), а функции PHP5, такие как get_headers()
работают только с ответами на исходящие запросы. Я запускаю PHP 5 на Apache с установленной установкой Ubuntu.
Если вы собираетесь использовать Apache, возможно, вам захочется взглянуть на apache_request_headers()
.
Для аутентификации на токенах:
$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]; } }
Для фона, почему Apache отфильтровывает заголовок Authorization
: https://stackoverflow.com/a/17490827
Решения, в зависимости от того, какой модуль Apache используется для передачи запроса в приложение:
mod_wsgi, mod_fcgid:
CGI:
Другие хаки – массирование заголовков в этом вопросе:
Отсутствует заголовок заголовка запроса. Заголовок авторизации в Symfony 2?
Apache 2.4 + PHP-FPM и заголовки авторизации
Добавьте этот код в свой .htaccess
RewriteEngine On RewriteRule .* - [e=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
Передайте свой заголовок, как Authorization: {auth_code}
и, наконец, вы получите код авторизации с помощью $_SERVER['HTTP_AUTHORIZATION']