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.

26
demandé sur jpatokal 2010-05-25 11:00:09

5 réponses

si vous n'utilisez Qu'Apache, vous pouvez jeter un oeil à apache_request_headers() .

36
répondu halfdan 2013-03-05 22:38:06

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];
    }
  } 
37
répondu deepwinter 2013-05-01 01:58:05

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

9
répondu karthikeyan ganesan 2017-10-30 20:38:05

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:

7
répondu joonas.fi 2017-05-23 12:00:27

Juste utiliser:

$headers = apache_request_headers();
$token = $headers['token'];
0
répondu Houssin Boulla 2018-04-24 12:00:12