Ответ 1
Если вы собираетесь использовать Apache, вы можете посмотреть apache_request_headers()
.
Итак, я пытаюсь разобрать входящий запрос в 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
: fooobar.com/questions/153825/...
Решения, в зависимости от того, какой модуль Apache используется для передачи запроса в приложение:
mod_wsgi, mod_fcgid:
CGI:
Другие хаки - массирование заголовков в этом вопросе:
Добавьте этот код в свой .htaccess
RewriteEngine On
RewriteRule .* - [e=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
Передайте свой заголовок, как Authorization: {auth_code}
, и, наконец, вы получите код авторизации с помощью $_SERVER['HTTP_AUTHORIZATION']