web-dev-qa-db-fra.com

Récupération de l'en-tête d'autorisation personnalisé à partir d'une demande PHP PHP

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.

32
jpatokal

Si vous n'utilisez que Apache, vous voudrez peut-être jeter un œil à Apache_request_headers() .

42
halfdan

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];
    }
  } 
41
deepwinter

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']

21
karthikeyan ganesan

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:

8
joonas.fi

Utilisation juste:

$headers = Apache_request_headers();
$token = $headers['token'];
3
Houssin Boulla