J'essaie donc d'analyser une demande entrante dans PHP qui a l'en-tête suivant défini:
Authorization: Custom Username
Question simple: comment diable puis-je mettre la main dessus? 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 ces paramètres n'est défini 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 les fonctions PHP5 comme get_headers()
uniquement travailler sur les réponses aux demandes sortantes. J'exécute PHP 5 sur Apache avec une installation Ubuntu prête à l'emploi.
Si vous n'utilisez que Apache, vous voudrez peut-être jeter un œil à Apache_request_headers()
.
Pour l'authentification basée sur des jetons:
$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 enfin vous obtenez le code d'autorisation en utilisant $_SERVER['HTTP_AUTHORIZATION']
Pour l'arrière-plan, pourquoi Apache filtre-t-il l'en-tête Authorization
: https://stackoverflow.com/a/17490827
Solutions selon le module Apache utilisé pour transmettre la demande à l'application:
mod_wsgi, mod_fcgid:
cgi:
Autres hacks - masser les en-têtes dans cette question:
Utilisation juste:
$headers = Apache_request_headers();
$token = $headers['token'];