Récupérer l'en-tête d'autorisation personnalisée de la requête PHP entrante
donc j'essaie de parser une requête entrante en PHP qui a l'en-tête suivant:
Authorization: Custom Username
Simple question: comment diable puis-je obtenir mes mains sur elle? Si c'était Authorization: Basic
, je pourrais obtenir le nom d'utilisateur de $_SERVER["PHP_AUTH_USER"]
. Si c'était X-Custom-Authorization: Username
, je pourrais obtenir le nom d'utilisateur de $_SERVER["HTTP_X_CUSTOM_AUTHORIZATION"]
. Mais aucun de ceux-ci ne sont définis par une autorisation personnalisée, var_dump($_SERVER)
ne révèle aucune mention de l'en-tête (en particulier, AUTH_TYPE
est manquant), et PHP5 des fonctions comme get_headers()
ne fonctionnent que sur les réponses aux demandes sortantes. J'exécute PHP 5 sur Apache avec une installation Ubuntu hors-de-la-boîte.
5 réponses
si vous n'utilisez Qu'Apache, vous pouvez jeter un oeil à apache_request_headers()
.
Pour la base de jetons d'authentification:
$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];
}
}
ajoutez ce code dans votre .htaccess
RewriteEngine On
RewriteRule .* - [e=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
passez votre en-tête comme Authorization: {auth_code}
et finalement vous obtenez le code D'autorisation en utilisant $_SERVER['HTTP_AUTHORIZATION']
pour le fond, pourquoi Apache filtre l'en-tête Authorization
: https://stackoverflow.com/a/17490827
Solutions en fonction du module Apache utilisé pour transmettre la requête à l'application:
mod_wsgi, mod_fcgid:
cgi:
autres hacks-masser les en-têtes dans cette question:
Juste utiliser:
$headers = apache_request_headers();
$token = $headers['token'];